Скройте члены перечисления

Сокрытие членов перечисления позволяет авторам класса изменить имена элемента перечисления, не вызывая несовместимости в существующем коде. Чтобы скрыть члены, создайте блок перечисления, который устанавливает 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'

Смотрите также

|