Freigeben über


DkmDataContainer Klasse

Definition

DkmDataContainer ist ein Baustein, der in dieser API verwendet wird. Viele der Objekte in dieser API können "virtuelle Felder" enthalten, die von einer beliebigen Komponente im System hinzugefügt werden. Dies ähnelt einer typsicheren Version des "expando"-Konzepts in JScript.

Regeln für DkmDataContainer:

  1. Alle Verweisobjekte im System erben von DkmDataContainer. Verweisobjekte werden von der Verteilerkomponente dieses Systems nachverfolgt, und an verschiedenen Marshallingpunkten (verwaltet-nativ>, nativ> verwaltet, Remoting) wird die Objektverweisidentität beibehalten. "Value"-Objekte erben nicht von DkmDataContainer, da das System diese Objekte nicht nachverfolgt, sodass bei jedem Marshallingübergang der Wert des Objekts kopiert wird.
  2. Die "virtuellen Felder" dieser Objekte, die von DkmDataContainer erben, werden als Datenelemente bezeichnet.
  3. Datenelemente sind für die Komponente, die sie hinzugefügt hat, PRIVAT. Dieses Feature kann nicht verwendet werden, um Felder über Komponentengrenzen hinweg gemeinsam zu nutzen.
  4. Datenelemente sind Instanzen einer Datenelementklasse. In verwaltetem Code erben Datenelementklassen von DkmDataItem, um sie als Datenelement zu identifizieren. In systemeigenem Code erben Datenelemente von IUnknown.
  5. Normalerweise müsste eine Komponente niemals ein Datenelement entfernen. Dies liegt daran, dass Datenelemente automatisch entfernt werden, wenn das Containerobjekt geschlossen wird.
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
Vererbung
DkmDataContainer
Vererbung
DkmDataContainer
Abgeleitet

Beispiele

Beispiel für eine Datenelementklasse. In verwaltetem Code müssen Datenelemente von der DkmDataItem-Klasse AliasLog erben: 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 eine neue instance der Beispieldatenelementklasse AliasLog log = new AliasLog("c:\foo.log");

Datenelemente können an eine Create-Methode übergeben werden... DkmClrAlias alias = DkmClrAlias. Create("ExampleName", log);

... oder kann dann mithilfe des SetDataItem-Alias hinzugefügt werden. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log);

anschließend kann der Wert mithilfe von GetDataItem AliasLog find = alias abgerufen werden. GetDataItem<AliasLog>();

Eigenschaften

IsUnloaded

Gibt true zurück, wenn ein "entladenes" Ereignis für dieses Objekt ausgelöst wurde (Beispiel: DkmThread::Unload wird aufgerufen) oder wenn das Objekt geschlossen wurde. Beachten Sie, dass beim Überprüfen dieser status sorgfältig darauf geachtet werden muss, dass die zurückgegebene status nach dem Lesen möglicherweise nicht mehr korrekt ist.

Methoden

GetDataItem<T>()

Ruft den instance von "T" ab, der diesem Container instance hinzugefügt wurde. Wenn dieser Container kein "T" enthält, gibt diese Funktion NULL zurück.

RemoveDataItem<T>()

Entfernen Sie den instance von "T" aus diesem Container. Es ist in der Regel nicht erforderlich, diese Methode aufzurufen, da ein Datencontainer automatisch geleert wird, wenn das Objekt geschlossen wird.

SetDataItem<T>(DkmDataCreationDisposition, T)

Platzieren Sie ein neues Element im Datencontainer.

Gilt für: