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