DkmDataContainer Klasa

Definicja

DkmDataContainer to blok konstrukcyjny, który jest używany w tym interfejsie API. Dzięki temu wiele obiektów w tym interfejsie API może zawierać "pola wirtualne", które są dodawane przez dowolny składnik w systemie. Jest to podobne do bezpiecznej dla typu wersji koncepcji "expando" w języku JScript.

Reguły dla DkmDataContainer:

  1. Wszystkie obiekty "odwołania" w systemie dziedziczą po DkmDataContainer. Obiekty referencyjne są śledzone przez składnik dyspozytora tego systemu, a w różnych punktach marshallingu (zarządzanych> natywnych, natywnych, zdalnie zarządzanych>) tożsamość odwołania do obiektu jest zachowywana. Obiekty "Value" nie dziedziczą z obiektu DkmDataContainer, ponieważ system nie śledzi tych obiektów, więc w żadnym przejściu marshalling wartość obiektu jest kopiowana.
  2. Te obiekty dziedziczą "pola wirtualne", które dziedziczą z elementu DkmDataContainer, są nazywane elementami danych.
  3. Elementy danych są prywatne do składnika, który je dodał. Tej funkcji nie można używać do udostępniania pól w granicach składników.
  4. Elementy danych to wystąpienia klasy elementu danych. W kodzie zarządzanym klasy elementów danych dziedziczą z elementu DkmDataItem, aby zidentyfikować je jako element danych. W kodzie natywnym elementy danych dziedziczą z elementu IUnknown.
  5. Zwykle składnik nigdy nie musiałby usuwać elementu danych. Dzieje się tak, ponieważ elementy danych są automatycznie usuwane po zamknięciu obiektu kontenera.
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
Dziedziczenie
DkmDataContainer
Dziedziczenie
DkmDataContainer
Pochodne

Przykłady

Przykładowa klasa elementu danych. W kodzie zarządzanym elementy danych muszą dziedziczyć z klasy 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();
}

}

Twórca nowe wystąpienie przykładowej klasy elementu danych AliasLog log = new AliasLog("c:\foo.log");

elementy danych można przekazać do metody create... DkmClrAlias alias = DkmClrAlias. Twórca("ExampleName", log);

... lub następnie można dodać przy użyciu aliasu SetDataItem. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log);

następnie można pobrać wartość przy użyciu polecenia GetDataItem AliasLog find = alias. GetDataItem<AliasLog>();

Właściwości

IsUnloaded

Zwraca wartość true, jeśli dla tego obiektu zostało podniesione zdarzenie "unloaded" (na przykład: DkmThread::Unload jest wywoływane) lub jeśli obiekt został zamknięty. Należy pamiętać, że podczas sprawdzania tego stanu należy zachować ostrożność, ponieważ bez synchronizacji zwrócony stan może nie być już dokładny po odczytaniu instrukcji.

Metody

GetDataItem<T>()

Pobiera wystąpienie elementu "T", które zostało dodane do tego wystąpienia kontenera. Jeśli ten kontener nie zawiera wartości "T", ta funkcja zwróci wartość null.

RemoveDataItem<T>()

Usuń wystąpienie elementu "T" z tego kontenera. Zwykle wywołanie tej metody jest niepotrzebne, ponieważ kontener danych zostanie automatycznie opróżniony po zamknięciu obiektu.

SetDataItem<T>(DkmDataCreationDisposition, T)

Umieść nowy element w kontenerze danych.

Dotyczy