Материалы, представленные в этом разделе, основаны на знании следующей информации.
Класс, совместимый с дескрипторами - класс, который можно включить с классами дескрипторов в иерархии классов, даже если класс не является классом дескрипторов.
Все классы дескрипторов совместимы с дескрипторами.
Все суперклассы классов, совместимых с дескрипторами, также должны быть совместимыми с дескрипторами.
HandleCompatible - атрибут класса, определяющий классы, не являющиеся управляемыми, как совместимые с дескриптором.
Обычно при выводе класса MATLAB ® из других классов все суперклассы являются классами дескрипторов, иначе ни один из них не является классами дескрипторов. Однако существуют ситуации, в которых класс предоставляет некоторую утилиту, которая используется как подклассами дескрипторов, так и подклассами без дескрипторов. Поскольку объединение классов handle и non-handle не является законным, автор класса утилит должен реализовать две различные версии утилиты.
Решение заключается в использовании классов, совместимых с дескрипторами. Совместимые с дескрипторами классы - это тип класса, который можно использовать с классами дескрипторов при формировании наборов суперклассов. Обозначить класс, не совместимый с ручками, как класс, совместимый с ручками, с помощью HandleCompatible атрибут класса.
classdef (HandleCompatible) MyClass ... end
Дескриптор-совместимые классы (то есть классы, чьи HandleCompatible атрибут имеет значение true) следуйте следующим правилам:
Все суперклассы класса, совместимого с дескриптором, также должны быть совместимыми с дескриптором
Если класс явно устанавливает HandleCompatibility атрибут для false, то ни один из суперклассов класса не может быть классами обработки.
Если класс явно не устанавливает HandleCompatible и, если любой суперкласс является дескриптором, то все суперклассы должны быть совместимы с дескриптором.
HandleCompatible атрибут не наследуется.
Класс, который явно не задает HandleCompatible атрибут для true является:
Класс дескриптора, если любой из его суперклассов является классом дескриптора
Класс значений, если ни один из суперклассов не является классами дескрипторов
Чтобы определить, является ли объект объектом-дескриптором, используйте isa функция:
isa(obj,'handle')