関連付けクラスの宣言

関連付けクラスは、他の 2 つのクラス間のリレーションシップを定義する特殊なクラスです。

次の手順では、MOF コードを使用して関連付けクラスを作成する方法について説明します。

MOF コードを使用して関連付けクラスを作成するには

  1. Association 修飾子をクラスに割り当てます。

    オブジェクトまたはクラスへの参照を含むクラスを作成することはできますが、Association 修飾子を使用すると、クラスが関連付けクラスであることが明確になるだけでなく、ベスト プラクティスとして、クラスが関連付けクラスとして完全に機能することが保証されます。

  2. ref 型を使用して関連付ける 2 つのオブジェクト インスタンスを記述する 2 つの参照をクラス内に作成します。

    参照は、オブジェクトへのパスを含めることで、関連付け内の 2 つのオブジェクトをバインドします。 必須ではありませんが、参照プロパティもキー プロパティとして使用します。

    完全修飾または名前空間相対参照を作成できますが、WMI では名前空間間参照のサポートが限定されています。 具体的には、静的に定義されたオブジェクトのみが名前空間の境界を越えて相互に参照できます。動的にサポートされているオブジェクトは相互に参照できません。

    必要に応じて、HasClassRefClassref 修飾子を object ref 型と組み合わせて使用して、クラスを参照します。

    WMI では、インスタンスへの 1 つの ref 参照ポイントと、クラスへのもう 1 つの object 参照ポイントを持つことがサポートされています。 この場合、関連付けクラスは、インスタンスをクラスにバインドする関連付けを記述します。

    次のコード例では、object 型で HasClassRefClassref を使用するための構文を表しています。

    [HasClassRefs, Association]
    class SomeAssocClass
    {
         [key, classref{ "MyEndpoint", "OtherContainer" }]
         object ref ep1;
         [key] object ref ep2;
    }; 
    

    前の例では、ep1 参照は MyEndpoint クラスまたは OtherContainer クラスのクラス定義を指すことができます。 参照クラスを弱く型指定する必要がある一方で、Classref 修飾子自体を弱く型指定することはできません。そうした場合、WMI クエリ エンジンの効率が大幅に低下します。 弱い型指定とは、object キーワードと ref データ型を使用して、任意のデータ型を含めることができる参照を作成することです。 HasClassRef を正常に使用するには、関連する修飾子のフレーバーを設定して、すべてのインスタンスとサブクラスに伝達する必要があります。

  3. 必要に応じて、他のプロパティを作成します。

    次のコード例は、WMI で現在、2 つ未満または 2 つを超える参照プロパティを持つ関連付けクラスをサポートしていないことを示しています。

    [Association : ToInstance] 
    class MyAssocClass
    {
        ClassX ref PathToClassX ;
        ClassY ref PathToClassY ;
    };
    
  4. 完了したら、MOF コンパイラを使用して MOF コードをコンパイルします。

    詳細については、「MOF ファイルのコンパイル」を参照してください。

手順 3 のコード例では、MyAssocClass 関連付けクラスを定義しています。 MyAssocClass クラスは、ClassXClassY の間のリレーションシップを定義します。 PathToClassX プロパティと PathToClassY プロパティには、関連付けるクラスのインスタンスへのオブジェクト パスが含まれています。 キーワード ToInstance は、修飾子の使用に関する情報を提供するために WMI で定義するいくつかのフレーバー フラグの 1 つです。 ToInstance キーワード は、WMI で Association 修飾子を関連付けクラスのすべてのインスタンスに伝達する必要があることを示します。 このインスタンス修飾子を確認することで、クライアント ソフトウェアでは、Association 修飾子を検索するためにクラス定義を取得しなくても、インスタンスが関連付けクラスに属していることを確認できます。 詳細については、「修飾子のフレーバーを使用した修飾子の記述」と「参照」を参照してください。

マネージド オブジェクト フォーマット (MOF) クラスの設計