Установка допустимых подклассов

Элементарные знания

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

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

Определение класса может задать список классов, которые оно позволяет как подклассы. Классы не в списке не могут быть заданы как подкласс класса. Чтобы задать позволенные подклассы, используйте атрибут класса 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 не находит ни одного из классов в позволенном списке классов, классом является эффективно Sealed. Запечатанный класс эквивалентен AllowedSubclasses = {}.

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

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

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

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

Задайте позволенные подклассы как Sealed:

classdef (Sealed) SubClass1
   ...
end

classdef (Sealed) SubClass2
   ...
end

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

Похожие темы