次の方法で共有


DkmDataContainer クラス

定義

DkmDataContainer は、この API 全体で使用される構成要素です。 これにより、この API のオブジェクトの多くには、システム内の任意のコンポーネントによって追加される "仮想フィールド" が含まれます。 これは、JScript の "expando" 概念のタイプ セーフ バージョンに似ています。

DkmDataContainer の規則:

  1. システム内のすべての 'reference' オブジェクトは、DkmDataContainer から継承されます。 参照オブジェクトは、このシステムのディスパッチャー コンポーネントによって追跡され、さまざまなマーシャリング ポイント (マネージド> ネイティブ、ネイティブ>マネージド、リモート処理) でオブジェクト参照 ID が保持されます。 'Value' オブジェクトは DkmDataContainer から継承されません。システムはこれらのオブジェクトを追跡しないため、マーシャリング遷移時にはオブジェクトの値がコピーされます。
  2. DkmDataContainer から継承されるこれらのオブジェクトの "仮想フィールド" は、データ項目と呼ばれます。
  3. データ項目は、追加したコンポーネントに対して PRIVATE です。 この機能を使用して、コンポーネントの境界を越えてフィールドを共有することはできません。
  4. データ項目は、データ項目クラスのインスタンスです。 マネージド コードでは、データ項目クラスは DkmDataItem から継承され、データ項目として識別されます。 ネイティブ コードでは、データ項目は IUnknown から継承されます。
  5. 通常、コンポーネントはデータ項目を削除する必要はありません。 これは、コンテナー オブジェクトが閉じられると、データ項目が自動的に削除されるためです。
public ref class DkmDataContainer abstract : MarshalByRefObject
public abstract class DkmDataContainer : MarshalByRefObject
public abstract class DkmDataContainer
type DkmDataContainer = class
    inherit MarshalByRefObject
type DkmDataContainer = class
Public MustInherit Class DkmDataContainer
Inherits MarshalByRefObject
Public MustInherit Class DkmDataContainer
継承
DkmDataContainer
継承
DkmDataContainer
派生

データ項目クラスの例。 マネージド コードでは、データ項目は DkmDataItem クラス AliasLog : DkmDataItem { readonly string LogPath; readonly StreamWriter Writer から継承する必要があります。

public AliasLog(string log)
{
    LogPath = log;
    Writer = new StreamWriter(log);
}

// Data items can override the 'OnClose' method to receive notification when the data
// container object (DkmClrAlias in our example) is closed.
protected override void OnClose()
{
    Writer.Close();
}

}

サンプル データ項目クラス AliasLog log = new AliasLog("c:\foo.log") の新しいインスタンスをCreateします。

データ項目は create メソッドに渡すことができます...DkmClrAlias エイリアス = DkmClrAlias。Create("ExampleName", log);

...または、SetDataItem エイリアスを使用して追加できます。SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log);

その後、GetDataItem AliasLog find = alias を使用して値を取得できます。GetDataItem<AliasLog>();

プロパティ

IsUnloaded

このオブジェクトに対して 'unloaded' イベントが発生した場合 (例: DkmThread::Unload が呼び出されます)、またはオブジェクトが閉じている場合は true を返します。 同期なしでこの状態を確認する場合は、読み取った後に返される状態が正確でなくなる可能性があるため、注意が必要です。

メソッド

GetDataItem<T>()

このコンテナー インスタンスに追加された 'T' のインスタンスを取得します。 このコンテナーに 'T' が含まれていない場合、この関数は null を返します。

RemoveDataItem<T>()

このコンテナーから 'T' のインスタンスを削除します。 通常、オブジェクトが閉じられるとデータ コンテナーが自動的に空になるので、このメソッドを呼び出す必要があります。

SetDataItem<T>(DkmDataCreationDisposition, T)

データ コンテナーに新しい項目を配置します。

適用対象