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