ハンドル互換クラス
基礎知識
この節では、以下の情報に関する知識を前提に説明を進めます。
重要な概念
ハンドル互換クラス — クラスがハンドル クラスでない場合でも、クラス階層のハンドル クラスに含めることができるクラス。
すべてのハンドル クラスは、ハンドル互換クラスです。
ハンドル互換クラスのすべてのスーパークラスもハンドル互換でなければなりません。
HandleCompatible
— 非ハンドル クラスをハンドル互換として定義するクラス属性。
ハンドル互換クラスを使用する場合
通常、MATLAB® クラスを他のクラスから派生させる場合、すべてのスーパークラスはハンドル クラスであるか、どのスーパークラスもハンドル クラスではありません。ただし、ハンドル サブクラスと非ハンドル サブクラスの両方で使用されるユーティリティがクラスにより提供される場合もあります。ハンドル クラスと非ハンドル クラスを組み合わせるのは適切でないため、そのユーティリティ クラスの作成者は、ユーティリティの 2 つの異なるバージョンを実装しなければなりません。
解決法は、ハンドル互換クラスを使用することです。ハンドル互換クラスは、スーパークラスのセットを形成する際にハンドル クラスと共に使用できます。HandleCompatible
クラス属性を使用して、クラスをハンドル互換として指定します。
classdef (HandleCompatible) MyClass ... end
ハンドル互換性規則
ハンドル互換クラス (つまり、HandleCompatible
属性が true
に設定されているクラス) は以下の規則に従います。
ハンドル互換クラスのすべてのスーパークラスもハンドル互換でなければなりません。
クラスが
HandleCompatibility
属性を明示的にfalse
に設定する場合、クラスのスーパークラスはハンドル クラスにはなりません。クラスが
HandleCompatible
属性を明示的に設定せず、いかなるスーパークラスもハンドルである場合、すべてのスーパークラスはハンドル互換でなければなりません。HandleCompatible
属性は継承されません。
HandleCompatible
属性を明示的に true
に設定しないクラスは以下のとおりです。
いかなるスーパークラスもハンドル クラスである場合のハンドル クラス
スーパークラスがどれもハンドル クラスでない場合の値クラス
ハンドル オブジェクトの識別
オブジェクトがハンドル オブジェクトかどうかを判定するには、関数 isa
を使用します。
isa(obj,'handle')