DkmDataContainer 类

定义

DkmDataContainer 是在整个 API 中使用的构建基块。 它允许此 API 中的许多对象包含由系统中的任何组件添加的“虚拟字段”。 这类似于 JScript 中“expando”概念的类型安全版本。

DkmDataContainer 的规则:

  1. 系统中的所有“reference”对象都继承自 DkmDataContainer。 引用对象由此系统的调度程序组件跟踪,并在各个封送点 (托管本机>、本机>托管的远程处理) 保留对象引用标识。 “Value”对象不会从 DkmDataContainer 继承,因为系统不跟踪这些对象,因此在任何封送转换时,都会复制对象的值。
  2. 从 DkmDataContainer 继承的这些对象的“虚拟字段”称为数据项。
  3. 数据项是添加它们的组件的专用项。 此功能不能用于跨组件边界共享字段。
  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();
}

}

Create示例数据项类 AliasLog 日志 = new AliasLog (“c:\foo.log”) ;

可将数据项传递到创建方法...DkmClrAlias 别名 = DkmClrAlias。Create (“ExampleName”,日志) ;

...或者,可以使用 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)

将新项放在数据容器中。

适用于