DkmDataContainer Classe

Définition

DkmDataContainer est un bloc de construction qui est utilisé dans cette API. Elle permet à la plupart des objets de cette API de contenir des « champs virtuels » qui sont ajoutés par n’importe quel composant du système. Ceci est similaire à une version de type sécurisé du concept « expando » dans JScript.

Règles pour DkmDataContainer :

  1. Tous les objets « reference » dans le système héritent de DkmDataContainer. Les objets de référence sont suivis par le composant répartiteur de ce système, et à différents points de marshaling (natif managé>, natif>, communication à distance) l’identité de référence d’objet est conservée. Les objets ' Value' n’héritent pas de DkmDataContainer, car le système ne suit pas ces objets. Par conséquent, lors d’une transition de marshaling, la valeur de l’objet est copiée.
  2. Les « champs virtuels » de ces objets qui héritent de DkmDataContainer sont appelés éléments de données.
  3. Les éléments de données sont PRIVÉS pour le composant qui les a ajoutés. Cette fonctionnalité ne peut pas être utilisée pour partager des champs au-delà des limites des composants.
  4. Les éléments de données sont des instances d’une classe d’élément de données. Dans le code managé, les classes d’éléments de données héritent de DkmDataItem pour les identifier en tant qu’élément de données. Dans le code natif, les éléments de données héritent d’IUnknown.
  5. En règle générale, un composant n’a jamais besoin de supprimer un élément de données. En effet, les éléments de données sont automatiquement supprimés lorsque l’objet conteneur est fermé.
C++
public ref class DkmDataContainer abstract : MarshalByRefObject
Héritage
DkmDataContainer
Héritage
DkmDataContainer
Dérivé

Exemples

Exemple de classe d’élément de données. Dans le code managé, les éléments de données doivent hériter de la 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 une nouvelle instance de l’exemple de classe d’élément de données AliasLog log = new AliasLog(« c :\foo.log ») ;

les éléments de données peuvent être passés à une méthode create... DkmClrAlias alias = DkmClrAlias. Create(« ExampleName », log) ;

... ou peut être ajouté à l’aide de l’alias SetDataItem. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log) ;

Ensuite, la valeur peut être récupérée à l’aide de GetDataItem AliasLog find = alias. GetDataItem<AliasLog>() ;

Propriétés

IsUnloaded

Retourne true si un événement « déchargé » a été déclenché pour cet objet (exemple : DkmThread ::Unload est appelé) ou si l’objet a été fermé. Notez que vous devez faire attention lors de la vérification de cette status car, sans synchronisation, le status retourné risque de ne plus être exact après la lecture de l’instruction.

Méthodes

GetDataItem<T>()

Obtient le instance de « T » qui a été ajouté à ce instance de conteneur. Si ce conteneur ne contient pas de « T », cette fonction retourne la valeur Null.

RemoveDataItem<T>()

Supprimez le instance de 'T' de ce conteneur. Il n’est généralement pas nécessaire d’appeler cette méthode, car un conteneur de données est automatiquement vidé lorsque l’objet est fermé.

SetDataItem<T>(DkmDataCreationDisposition, T)

Placez un nouvel élément dans le conteneur de données.

S’applique à

Produit Versions
Visual Studio SDK 2015, 2017, 2019, 2022