Partager via


Substitution explicite d'un membre d'interface

La syntaxe servant à déclarer une substitution explicite d'un membre d'interface dans une classe a été modifiée entre Extensions managées pour C++ et Visual C++ 2010.

Vous voudrez fréquemment fournir deux instances d'un membre d'interface dans une classe qui implémente cette interface - une qui sert lorsque les objets de la classe sont manipulés via un handle d'interface, et une autre qui sert lorsque les objets de la classe sont utilisés via l'interface de classe. Par exemple :

public __gc class R : public ICloneable {
   // to be used through ICloneable
   Object* ICloneable::Clone();

   // to be used through an R
   R* Clone();
};

En Extensions managées, cela se fait en fournissant une déclaration explicite de la méthode d'interface avec le nom de la méthode qualifié par le nom de l'interface. L'instance spécifique à la classe est non qualifiée. Cela supprime la nécessité d'un cast aval de la valeur de retour de Clone, dans cet exemple, lorsqu'elle est explicitement appelée via une instance de R.

Dans la nouvelle syntaxe, un mécanisme général de substitution a été introduit pour remplacer la syntaxe d'Extensions managées. Notre exemple sera donc réécrit comme suit :

public ref class R : public ICloneable {
public:
   // to be used through ICloneable
   virtual Object^ InterfaceClone() = ICloneable::Clone;

   // to be used through an R
   virtual R^ Clone();
};

Cette révision exige que le membre d'interface explicitement substitué reçoive un nom unique dans la classe. Ici, j'ai fourni le nom encombrant de InterfaceClone. Le comportement reste le même : un appel via l'interface ICloneable appelle l'InterfaceClone, renommé tandis qu'un appel via un objet de type R appelle la deuxième instance de Clone.

Voir aussi

Référence

Explicit Overrides

Concepts

Déclarations de membre dans une classe ou interface