exponenta event banner

Скрыть элементы перечисления

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

Чтобы перечислить имена всех скрытых элементов, используйте класс дескриптора findobj способ:

 findobj(mc.EnumerationMemberList,'Hidden',true).Name
ans =

    'red'


ans =

    'green'


ans =

    'blue'

См. также

|