DkmDataContainer 類別

定義

DkmDataContainer 是在此 API 中使用的建置組塊。 它可讓此 API 中的許多物件包含系統中任何元件所新增的「虛擬欄位」。 這類似於 JScript 中 'expando' 概念的類型安全版本。

DkmDataContainer 的規則:

  1. 系統中的所有 『reference』 物件都繼承自 DkmDataContainer。 參考物件是由這個系統的發送器元件所追蹤,而且會在各種封送處理點 (Managed 原生>、原生>受控、遠端處理) 保留對象參考識別。 'Value' 物件不會繼承自 DkmDataContainer,因為系統不會追蹤這些物件,因此在任何封送處理轉換時,都會複製物件的值。
  2. 繼承自 DkmDataContainer 之這些物件的「虛擬欄位」稱為數據項。
  3. 數據項對新增它們的元件是 PRIVATE。 此功能無法用於跨元件界限共用欄位。
  4. 數據項是數據項類別的實例。 在 Managed 程式代碼中,數據項類別繼承自 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
衍生

範例

範例數據項類別。 在 Managed 程式代碼中,數據項必須繼承自 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();
}

}

Create 範例數據項類別 AliasLog log = new AliasLog (“c:\foo.log”) ;

資料項目可以傳遞至建立方法...DkmClrAlias 別名 = DkmClrAlias。Create (“ExampleName”, log) ;

...或者,可以使用 SetDataItem 別名來新增。SetDataItem<AliasLog> (DkmDataCreationDisposition.CreateAlways, log) ;

然後使用 GetDataItem AliasLog find = alias 來擷取值。GetDataItem<AliasLog> () ;

屬性

IsUnloaded

如果已針對這個對象引發 'unloaded' 事件,則傳回 true (範例:DkmThread::Unload 會呼叫) 或物件已關閉。 請注意,檢查此狀態時必須小心,而不進行同步處理,傳回的狀態在讀取之後可能無法再精確指示。

方法

GetDataItem<T>()

取得已新增至這個容器實例的 『T』 實例。 如果此容器不包含 『T』,此函式會傳回 null。

RemoveDataItem<T>()

從這個容器中移除 『T』 的實例。 通常不需要呼叫這個方法,因為數據容器會在物件關閉時自動清空。

SetDataItem<T>(DkmDataCreationDisposition, T)

將新專案放在數據容器中。

適用於