Main Content

ハンドル互換クラス

基礎知識

この節では、以下の情報に関する知識を前提に説明を進めます。

重要な概念

ハンドル互換クラス — クラスがハンドル クラスでない場合でも、クラス階層のハンドル クラスに含めることができるクラス。

  • すべてのハンドル クラスは、ハンドル互換クラスです。

  • ハンドル互換クラスのすべてのスーパークラスもハンドル互換でなければなりません。

HandleCompatible — 非ハンドル クラスをハンドル互換として定義するクラス属性。

ハンドル互換クラスを使用する場合

通常、MATLAB® クラスを他のクラスから派生させる場合、すべてのスーパークラスはハンドル クラスであるか、どのスーパークラスもハンドル クラスではありません。ただし、ハンドル サブクラスと非ハンドル サブクラスの両方で使用されるユーティリティがクラスにより提供される場合もあります。ハンドル クラスと非ハンドル クラスを組み合わせるのは適切でないため、そのユーティリティ クラスの作成者は、ユーティリティの 2 つの異なるバージョンを実装しなければなりません。

解決法は、ハンドル互換クラスを使用することです。ハンドル互換クラスは、スーパークラスのセットを形成する際にハンドル クラスと共に使用できます。HandleCompatible クラス属性を使用して、クラスをハンドル互換として指定します。

classdef (HandleCompatible) MyClass
   ...
end

ハンドル互換性規則

ハンドル互換クラス (つまり、HandleCompatible 属性が true に設定されているクラス) は以下の規則に従います。

  • ハンドル互換クラスのすべてのスーパークラスもハンドル互換でなければなりません。

  • クラスが HandleCompatibility 属性を明示的に false に設定する場合、クラスのスーパークラスはハンドル クラスにはなりません。

  • クラスが HandleCompatible 属性を明示的に設定せず、いかなるスーパークラスもハンドルである場合、すべてのスーパークラスはハンドル互換でなければなりません。

  • HandleCompatible 属性は継承されません。

HandleCompatible 属性を明示的に true に設定しないクラスは以下のとおりです。

  • いかなるスーパークラスもハンドル クラスである場合のハンドル クラス

  • スーパークラスがどれもハンドル クラスでない場合の値クラス

ハンドル オブジェクトの識別

オブジェクトがハンドル オブジェクトかどうかを判定するには、関数 isa を使用します。

isa(obj,'handle')

関連するトピック