Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

クラスのメタデータ

クラスのメタデータとは

クラスのメタデータとは、さまざまなメタクラス オブジェクトから利用できるクラス定義に関する情報のことです。クラスのインスタンスを作成せずに情報を取得するには、メタクラス オブジェクトを使用します。メタデータを使用すると、プログラムによってクラスを検証できます。各メタクラスには、それが記述するクラスやクラス コンポーネントに関する情報を含むプロパティ、メソッド、イベントが含まれます。

すべてのクラス コンポーネントには関連付けられたメタクラスがあり、それらには 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.packagemeta.classContainingPackage プロパティからアクセスします。

  • meta.class — 関数 metaclass または ? 演算子を使用して、クラス名またはクラス オブジェクトから作成します。

  • meta.propertymeta.classPropertyList プロパティからアクセスします。

  • meta.DynamicPropertyaddprop メソッドから取得します。

  • meta.methodmeta.classMethodList プロパティからアクセスします。

  • meta.eventmeta.classEventList プロパティからアクセスします。

  • meta.EnumeratedValuemeta.classEnumerationMemberListList プロパティからアクセスします。

メタクラス オブジェクト

メタクラスは、それぞれのクラス コンストラクターを直接呼び出してもインスタンス化できません。クラスのインスタンスまたはクラス名からメタクラス オブジェクトを作成します。

  • ?ClassName — 名前付きクラスの meta.class オブジェクトを返します。変数に文字としてクラス名が格納されている meta.class.fromName を使用します。

  • meta.class.fromName('ClassName') — 名前付きクラスの meta.class オブジェクトを返します (meta.class.fromNamemeta.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.propertymeta.method など) を取得できます。

メモ

ここで、メタクラスとは meta パッケージ内のすべてのクラスを指す用語です。meta.class は、MATLAB® クラスに関する情報がインスタンスに含まれる meta パッケージ内のクラスです。メタデータはメタクラスに含まれるクラス情報です。

メタクラス オブジェクトのライフサイクル

クラス定義を変更すると、MATLAB はそのクラス定義を再度読み込みます。クラスのインスタンスが存在する場合、MATLAB は新しい定義に従ってそれらのオブジェクトを更新します。

ただし、MATLAB は既存のメタクラス オブジェクトを新しいクラス定義に更新しません。クラスのメタクラス オブジェクトが存在している場合にクラス定義を変更すると、MATLAB はメタクラス オブジェクトを削除して、そのハンドルを無効にします。クラスの更新後、新しいメタクラス オブジェクトを作成しなければなりません。

クラスの変更と再読み込みの方法ついての詳細は、変更済みクラスの自動更新を参照してください。

関連するトピック