exponenta event banner

Обрабатывать совместимые классы

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

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

Основные концепции

Класс, совместимый с дескрипторами - класс, который можно включить с классами дескрипторов в иерархии классов, даже если класс не является классом дескрипторов.

  • Все классы дескрипторов совместимы с дескрипторами.

  • Все суперклассы классов, совместимых с дескрипторами, также должны быть совместимыми с дескрипторами.

HandleCompatible - атрибут класса, определяющий классы, не являющиеся управляемыми, как совместимые с дескриптором.

Когда использовать совместимые классы дескрипторов

Обычно при выводе класса MATLAB ® из других классов все суперклассы являются классами дескрипторов, иначе ни один из них не является классами дескрипторов. Однако существуют ситуации, в которых класс предоставляет некоторую утилиту, которая используется как подклассами дескрипторов, так и подклассами без дескрипторов. Поскольку объединение классов handle и non-handle не является законным, автор класса утилит должен реализовать две различные версии утилиты.

Решение заключается в использовании классов, совместимых с дескрипторами. Совместимые с дескрипторами классы - это тип класса, который можно использовать с классами дескрипторов при формировании наборов суперклассов. Обозначить класс, не совместимый с ручками, как класс, совместимый с ручками, с помощью HandleCompatible атрибут класса.

classdef (HandleCompatible) MyClass
   ...
end

Обработка правил совместимости

Дескриптор-совместимые классы (то есть классы, чьи HandleCompatible атрибут имеет значение true) следуйте следующим правилам:

  • Все суперклассы класса, совместимого с дескриптором, также должны быть совместимыми с дескриптором

  • Если класс явно устанавливает HandleCompatibility атрибут для false, то ни один из суперклассов класса не может быть классами обработки.

  • Если класс явно не устанавливает HandleCompatible и, если любой суперкласс является дескриптором, то все суперклассы должны быть совместимы с дескриптором.

  • HandleCompatible атрибут не наследуется.

Класс, который явно не задает HandleCompatible атрибут для true является:

  • Класс дескриптора, если любой из его суперклассов является классом дескриптора

  • Класс значений, если ни один из суперклассов не является классами дескрипторов

Определить объекты-дескрипторы

Чтобы определить, является ли объект объектом-дескриптором, используйте isa функция:

isa(obj,'handle')

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