Condividi tramite


DkmDataContainer Classe

Definizione

DkmDataContainer è un blocco predefinito usato in tutta questa API. Consente a molti degli oggetti in questa API di contenere "campi virtuali" aggiunti da qualsiasi componente nel sistema. È simile a una versione sicura di tipo del concetto di 'expando' in JScript.

Regole per DkmDataContainer:

  1. Tutti gli oggetti 'reference' nel sistema ereditano da DkmDataContainer. Gli oggetti di riferimento vengono rilevati dal componente dispatcher di questo sistema e in vari punti di marshalling (gestiti>, nativi>, nativi, remoting) l'identità di riferimento dell'oggetto viene mantenuta. Gli oggetti 'Value' non ereditano da DkmDataContainer perché il sistema non tiene traccia di questi oggetti, quindi in qualsiasi transizione di marshalling il valore dell'oggetto viene copiato.
  2. I "campi virtuali" di questi oggetti che ereditano da DkmDataContainer sono denominati elementi di dati.
  3. Gli elementi di dati sono PRIVATI per il componente che li ha aggiunti. Questa funzionalità non può essere usata per condividere i campi tra i limiti dei componenti.
  4. Gli elementi di dati sono istanze di una classe di elementi di dati. Nel codice gestito le classi dell'elemento di dati ereditano da DkmDataItem per identificarle come elemento di dati. Nel codice nativo gli elementi di dati ereditano da IUnknown.
  5. In genere, un componente non deve mai rimuovere un elemento dati. Ciò avviee perché gli elementi dati vengono rimossi automaticamente quando l'oggetto contenitore viene chiuso.
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
Ereditarietà
DkmDataContainer
Ereditarietà
DkmDataContainer
Derivato

Esempio

Classe elemento di dati di esempio. Nel codice gestito, gli elementi di dati devono ereditare dalla classe 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 una nuova istanza della classe aliasLog dell'elemento di dati di esempio = nuovo aliasLog("c:\foo.log");

gli elementi di dati possono essere passati a un metodo di creazione... DkmClrAlias alias = DkmClrAlias. Create("ExampleName", log);

... oppure può essere aggiunto usando l'alias SetDataItem. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log);

è quindi possibile recuperare il valore usando GetDataItem AliasLog find = alias. GetDataItem<AliasLog>();

Proprietà

IsUnloaded

Restituisce true se per questo oggetto è stato generato un evento 'unloaded', ad esempio DkmThread::Unload, o se l'oggetto è stato chiuso. Si noti che è necessario prestare attenzione quando si controlla questo stato come, senza sincronizzazione, lo stato restituito potrebbe non essere più accurato dopo la lettura.

Metodi

GetDataItem<T>()

Ottiene l'istanza di 'T' aggiunta a questa istanza del contenitore. Se questo contenitore non contiene un 'T', questa funzione restituirà Null.

RemoveDataItem<T>()

Rimuovere l'istanza di 'T' da questo contenitore. In genere non è necessario chiamare questo metodo come contenitore di dati verrà svuotato automaticamente quando l'oggetto viene chiuso.

SetDataItem<T>(DkmDataCreationDisposition, T)

Inserire un nuovo elemento nel contenitore di dati.

Si applica a