DkmDataContainer Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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:
- 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.
- Te obiekty dziedziczą "pola wirtualne", które dziedziczą z elementu DkmDataContainer, są nazywane elementami danych.
- 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.
- 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.
- 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. |