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