Материал, представленный в этом разделе, основывается на знании следующей информации.
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')