DkmDataContainer Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
DkmDataContainer — это стандартный блок, который используется в этом API. Это позволяет многим объектам в этом API содержать "виртуальные поля", которые добавляются любым компонентом в системе. Это похоже на типобезопасную версию концепции expando в JScript.
Правила для 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 log = new AliasLog("c:\foo.log");
Элементы данных можно передать в метод create... DkmClrAlias alias = DkmClrAlias. Create("ExampleName", log);
... или можно добавить с помощью псевдонима SetDataItem. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log);
затем значение можно получить с помощью GetDataItem AliasLog find = alias. GetDataItem<AliasLog>();
Свойства
IsUnloaded |
Возвращает значение true, если для этого объекта было инициировано событие "unloaded" (например, вызывается DkmThread::Unload) или если объект был закрыт. Обратите внимание, что при проверке этого состояния необходимо соблюдать осторожность, так как без синхронизации возвращаемое состояние может быть не точным после чтения инструкции. |
Методы
GetDataItem<T>() |
Возвращает экземпляр "T", добавленный в этот экземпляр контейнера. Если этот контейнер не содержит "T", эта функция возвращает значение NULL. |
RemoveDataItem<T>() |
Удалите экземпляр T из этого контейнера. Обычно не требуется вызывать этот метод, так как контейнер данных автоматически очищается при закрытии объекта. |
SetDataItem<T>(DkmDataCreationDisposition, T) |
Поместите новый элемент в контейнер данных. |