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

Элементарные знания

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

Ключевые Концепции

Совместимый с указателем класс — класс, который можно включать с классами 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')

Похожие темы

Была ли эта тема полезной?