Condividi tramite


Override esplicito di un membro di interfaccia

La sintassi per la dichiarazione di un override esplicito di un membro di interfaccia all'interno di una classe è stata modificata dalle estensioni gestite per C++ in Visual C++ 2010.

Spesso si desidera fornire due istanze di un membro di interfaccia all'interno di una classe che implementa l'interfaccia: un'istanza viene utilizzata in caso di modifica degli oggetti della classe tramite un handle di interfaccia e un'istanza viene utilizzata in caso di utilizzo degli oggetti della classe tramite l'interfaccia della classe. Di seguito è riportato un esempio:

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

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

Nelle estensioni gestite, a tale scopo viene fornita una dichiarazione esplicita del metodo di interfaccia, con il nome del metodo qualificato con il nome dell'interfaccia. L'istanza specifica della classe non è qualificata. Nell'esempio, in caso di chiamata esplicita tramite un'istanza di R non è pertanto necessario eseguire il downcast del valore restituito di Clone.

Nella nuova sintassi, è stato introdotto un meccanismo di override generale in sostituzione della sintassi delle estensioni gestite. È possibile riscrivere l'esempio come segue:

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();
};

Con questa revisione è necessario che al membro di interfaccia sottoposto a override esplicito venga assegnato un nome univoco all'interno della classe. In questo caso, è stato specificato il nome InterfaceClone. Il comportamento rimane invariato: una chiamata tramite l'interfaccia ICloneable richiama il membro InterfaceClone, rinominato, mentre una chiamata tramite un oggetto di tipo R richiama la seconda istanza di Clone.

Vedere anche

Riferimenti

Explicit Overrides

Concetti

Dichiarazioni di membri in una classe o interfaccia