exponenta event banner

Укажите разрешенные подклассы

Базовые знания

Материалы, представленные в этом разделе, основаны на понимании следующей информации:

Почему управление разрешенными подклассами

Определение класса может указывать список классов, разрешенных в качестве подклассов. Классы, отсутствующие в списке, не могут быть определены как подкласс класса. Чтобы указать допустимые подклассы, используйте AllowedSubclasses атрибут класса.

AllowedSubclasses атрибут предоставляет точку конструкции между Sealed классы, которые не разрешают подкласс, и поведение по умолчанию, которое не ограничивает подкласс.

Управляя разрешенными подклассами, можно создать запечатанную иерархию классов. То есть система классов, которая позволяет определенному набору классов извлекаться из определенных базовых классов, но которая не допускает неограниченного подкласса.

Дополнительные сведения об этой методике см. в разделе Определение запечатанной иерархии классов.

Укажите разрешенные подклассы

Укажите список одного или нескольких разрешенных подклассов в classdef оператор путем назначения meta.class объекты в AllowedSubclasses атрибут. Создать meta.class объект, ссылающийся на определенный класс с помощью ? оператор и имя класса:

classdef (AllowedSubclasses = ?ClassName) MySuperClass
   ...
end

Использование массива ячеек meta.class объекты для определения нескольких допустимых подклассов:

classdef (AllowedSubclasses = {?ClassName1,?ClassName2,...?ClassNameN}) MySuperClass
   ...
end

Всегда использовать полное имя класса при ссылке на имя класса:

classdef (AllowedSubclasses = ?Package.SubPackage.ClassName1) MySuperClass
   ...
end

Назначение пустого массива ячеек AllowedSubclasses фактически тот же самый атрибут, что и определение Sealed класс.

classdef (AllowedSubclasses = {}) MySuperClass
   ...
end

Примечание

Использовать только ? оператор и имя класса для генерации meta.class объекты. Значения, присвоенные AllowedSubclasses атрибут не может содержать другие выражения MATLAB ®, включая функции, возвращающие meta.class объекты или массивы ячеек meta.class объекты.

Результат объявления разрешенных подклассов

Включение класса в список AllowedSubclasses не определяет этот класс как подкласс и не требует определения класса как подкласса. Это позволяет только определить класс ссылки как подкласс.

Объявление класса как разрешенного подкласса не влияет на то, может ли сам этот класс быть подклассом.

Определение класса может содержать назначения AllowedSubclasses атрибут, который ссылается на классы, которые в настоящее время не определены или не доступны в пути MATLAB. Любой связанный подкласс, который MATLAB не может найти при загрузке класса, эффективно удаляется из списка без возникновения ошибки или предупреждения. MATLAB запоминает класс, на который имеется ссылка, в случае, если он становится доступным в более поздний момент времени.

Примечание

Если MATLAB не находит ни одного из классов в списке разрешенных подклассов, класс эффективно Sealed. Запечатанный класс эквивалентен AllowedSubclasses = {}.

Используйте meta.class собственность RestrictsSubclassing чтобы определить, является ли класс Sealed или указывает AllowedSubclasses.

Определение запечатанной иерархии классов

AllowedSubclasses позволяет определить иерархию запечатанных классов путем запечатывания разрешенных подклассов:

classdef (AllowedSubclasses = {?SubClass1,?SubClass2}) SuperClass
   ...
end

Определите допустимые подклассы как Sealed:

classdef (Sealed) SubClass1
   ...
end

classdef (Sealed) SubClass2
   ...
end

Запечатанные иерархии классов позволяют использовать уровень абстракции, необходимый для проекта, при сохранении замкнутой системы классов.

Связанные темы