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