Сокрытие членов перечисления позволяет авторам класса изменить имена элемента перечисления, не вызывая несовместимости в существующем коде. Чтобы скрыть члены, создайте блок перечисления, который устанавливает Hidden
атрибут. Члены заданы в Hidden
блок перечисления не отображается, когда члены перечисления запрошены с помощью enumeration
функция.
Когда класс перечисления выводит из другого класса, такого как числовой или логический класс, затем каждому члену можно было сопоставить значение с ним. Если двум членам присвоили то же значение им, то член, заданный сначала в определении класса, маскирует второй член. Оба имени являются допустимыми членами перечисления, но первый заданный является первичным членом. В то время как маскирование позволяет использовать одно имя элемента вместо другого, это не скрывает вторичное имя от пользователей класса.
Используя Hidden
атрибут удаляет имена элемента маскированные из пользовательского представления. Например, HighlightColor
класс задает члены перечисления, которые представляют цвета подсветки синтаксиса.
classdef HighlightColor < int32 enumeration red (1) green (2) blue (3) end end
Новая версия класса использует более описательные имена элемента, но класс должен постараться не повреждать существующий код, который использует исходные имена элемента, красные, зеленые, и синие. Используя Hidden
атрибут для членов перечисления позволяет классу скрыть исходные члены.
classdef HighlightColor < int32 enumeration error (1) comment (2) keyword (3) end enumeration (Hidden) red (1) green (2) blue (3) end end
Код, который использует исходные имена элемента, продолжает работать. Например, существующие ссылки на теперь скрытый член HighlightColor.blue
совместимо с тем же самым - оценил нескрытый член HighlightColor.keyword
.
%
a = HighlightColor.blue
a = HighlightColor enumeration keyword
a == HighlightColor.Keyword
ans = logical 1
Для членов перечисления, которые представляют значения, первый член, заданный в классе, является первичным членом для того значения. Например, в HighlightColor
класс, keyword
первичный член и blue
вторичный член, оба представления значения 3. Как правило, первичный член не скрыт, в то время как вторичный член скрыт. Однако, если проект класса требует, чтобы первичный член был скрыт, затем вторичный член должен быть скрыт также.
У чистых членов перечисления нет базовых значений, таким образом, нет никакого способа идентифицировать один член как замену для другого. Однако можно использовать Hidden
припишите, чтобы удалить член из пользовательского представления при предотвращении несовместимостей с существующим использованием скрытого члена.
Например, PCComponents
класс задает перечисления, которые используются в онлайновой форме в компьютерном порядке. В то время как FloppyDrive
компонент является устаревшим, член перечисления может остаться в классе как скрытый член. Форма может исключить FloppyDrive
из списка выбора, но автора класса может сохранить этот член доступным так, чтобы существующие формы, которые относятся к FloppyDrive
все еще допустимы.
classdef PCComponents enumeration USBSlots CDPlayer end enumeration (Hidden) FloppyDrive end end
Найдите информацию о скрытых членах перечисления, использующих метаданные класса. meta.EnumeratedValue
класс предоставляет информацию о членах перечисления. Например, получая доступ к метаданным для HighlightColor
класс, используемый в предыдущих примерах, может показать имена скрытых членов.
mc =?HighlightColor
mc = class with properties: Name: 'HighlightColor' Description: '' DetailedDescription: '' Hidden: 0 Sealed: 0 Abstract: 0 Enumeration: 1 ConstructOnLoad: 0 HandleCompatible: 0 InferiorClasses: {[1×1 meta.class]} ContainingPackage: [0×0 meta.package] RestrictsSubclassing: 0 PropertyList: [0×1 meta.property] MethodList: [140×1 meta.method] EventList: [0×1 meta.event] EnumerationMemberList: [6×1 meta.EnumeratedValue] SuperclassList: [1×1 meta.class]
Каждый член перечисления, описывают meta.EnumeratedValue
объект, который содержится в EnumerationMemberList
свойство. Например, четвертый элемент в EnumerationMemberList
массив содержит meta.EnumerationValue
объект для члена с именем red
.
mc.EnumerationMemberList(4)
ans = EnumeratedValue with properties: Name: 'red' Description: '' DetailedDescription: '' Hidden: 1
Чтобы перечислить имена всех скрытых членов, используйте класс Handle findobj
метод:
findobj(mc.EnumerationMemberList,'Hidden',true).Name
ans = 'red' ans = 'green' ans = 'blue'