Поделиться через


DkmDataContainer Класс

Определение

DkmDataContainer — это стандартный блок, который используется в этом API. Это позволяет многим объектам в этом API содержать "виртуальные поля", которые добавляются любым компонентом в системе. Это похоже на типобезопасную версию концепции expando в JScript.

Правила для 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 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)

Поместите новый элемент в контейнер данных.

Применяется к