DkmDataContainer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
DkmDataContainer 是在整个 API 中使用的构建基块。 它允许此 API 中的许多对象包含由系统中的任何组件添加的“虚拟字段”。 这类似于 JScript 中“expando”概念的类型安全版本。
DkmDataContainer 的规则:
- 系统中的所有“reference”对象都继承自 DkmDataContainer。 引用对象由此系统的调度程序组件跟踪,并在各个封送点 (托管本机>、本机>托管的远程处理) 保留对象引用标识。 “Value”对象不会从 DkmDataContainer 继承,因为系统不跟踪这些对象,因此在任何封送转换时,都会复制对象的值。
- 从 DkmDataContainer 继承的这些对象的“虚拟字段”称为数据项。
- 数据项是添加它们的组件的专用项。 此功能不能用于跨组件边界共享字段。
- 数据项是数据项类的实例。 在托管代码中,数据项类继承自 DkmDataItem,以将其标识为数据项。 在本机代码中,数据项继承自 IUnknown。
- 通常,组件永远不需要删除数据项。 这是因为关闭容器对象时会自动删除数据项。
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) |
将新项放在数据容器中。 |