クラスのメタデータ
クラスのメタデータとは
クラスのメタデータとは、さまざまなメタクラス オブジェクトから利用できるクラス定義に関する情報のことです。クラスのインスタンスを作成せずに情報を取得するには、メタクラス オブジェクトを使用します。メタデータを使用すると、プログラムによってクラスを検証できます。各メタクラスには、それが記述するクラスやクラス コンポーネントに関する情報を含むプロパティ、メソッド、イベントが含まれます。
すべてのクラス コンポーネントには関連付けられたメタクラスがあり、それらには meta.class
オブジェクトからアクセスします。たとえば、matlab.alias.AliasFileManager
クラスの meta.class
オブジェクトを作成します。
mc = ?matlab.alias.AliasFileManager
mc = class with properties: Name: 'matlab.alias.AliasFileManager' Description: 'AliasFileManager Create and edit alias definition files' DetailedDescription: ' Use an AliasFileManager object to create and manage... Hidden: 0 Sealed: 1 Abstract: 0 Enumeration: 0 ConstructOnLoad: 0 HandleCompatible: 1 InferiorClasses: {0×1 cell} ContainingPackage: [1×1 meta.package] Aliases: [0×1 string] RestrictsSubclassing: 1 PropertyList: [1×1 meta.property] MethodList: [28×1 meta.method] EventList: [1×1 meta.event] EnumerationMemberList: [0×1 meta.EnumeratedValue] SuperclassList: [1×1 meta.class]
meta
パッケージ
meta
パッケージには、クラスとクラス コンポーネントの定義が記述されたメタクラスが含まれています。クラス名はメタクラスによって記述されるコンポーネントを表します。たとえば、各クラス プロパティには関連付けられた meta.property があります。クラス コンポーネントに定義された属性は、それぞれのメタクラス オブジェクトのプロパティに対応します。
meta.package
—meta.class
のContainingPackage
プロパティからアクセスします。meta.class
— 関数metaclass
または?
演算子を使用して、クラス名またはクラス オブジェクトから作成します。meta.property
—meta.class
のPropertyList
プロパティからアクセスします。meta.DynamicProperty
—addprop
メソッドから取得します。meta.method
—meta.class
のMethodList
プロパティからアクセスします。meta.event
—meta.class
のEventList
プロパティからアクセスします。meta.EnumeratedValue
—meta.class
のEnumerationMemberListList
プロパティからアクセスします。
メタクラス オブジェクト
メタクラスは、それぞれのクラス コンストラクターを直接呼び出してもインスタンス化できません。クラスのインスタンスまたはクラス名からメタクラス オブジェクトを作成します。
?
— 名前付きクラスのClassName
meta.class
オブジェクトを返します。変数に文字としてクラス名が格納されているmeta.class.fromName
を使用します。meta.class.fromName('
— 名前付きクラスのClassName
')meta.class
オブジェクトを返します (meta.class.fromName
はmeta.class
のメソッドです)。metaclass(obj)
— クラス インスタンス (metaclass
) のメタクラス オブジェクトを返します。
?
演算子を使用してクラス名から meta.class
オブジェクトを作成します。
mc = ?MyClass;
fromName
メソッドを使用してクラス名から meta.class
オブジェクトを作成します。
mc = meta.class.fromName('MyClass');
クラス インスタンスから meta.class
オブジェクトを作成します。
obj = MyClass; mc = metaclass(obj);
関数 metaclass
は、meta.class
オブジェクト (すなわち、meta.class
クラスのオブジェクト) を返します。meta.class
オブジェクトから、他のメタクラス オブジェクト (meta.property
、meta.method
など) を取得できます。
メモ
ここで、メタクラスとは meta
パッケージ内のすべてのクラスを指す用語です。meta.class
は、MATLAB® クラスに関する情報がインスタンスに含まれる meta
パッケージ内のクラスです。メタデータはメタクラスに含まれるクラス情報です。
メタクラス オブジェクトのライフサイクル
クラス定義を変更すると、MATLAB はそのクラス定義を再度読み込みます。クラスのインスタンスが存在する場合、MATLAB は新しい定義に従ってそれらのオブジェクトを更新します。
ただし、MATLAB は既存のメタクラス オブジェクトを新しいクラス定義に更新しません。クラスのメタクラス オブジェクトが存在している場合にクラス定義を変更すると、MATLAB はメタクラス オブジェクトを削除して、そのハンドルを無効にします。クラスの更新後、新しいメタクラス オブジェクトを作成しなければなりません。
クラスの変更と再読み込みの方法ついての詳細は、変更済みクラスの自動更新を参照してください。