Compartir a través de


Reemplazo explícito de un miembro de interfaz

Actualización: noviembre 2007

La sintaxis para declarar un reemplazo explícito de un miembro de interfaz dentro de una clase ha cambiado de Extensiones administradas para C++ a Visual C++ 2008.

Es muy frecuente que se deseen proporcionar dos instancias de un miembro de interfaz dentro de una clase que implementa la interfaz: una que se utiliza cuando se manipulan objetos de clase mediante un identificador de interfaz y otra que se utiliza cuando se usan objetos de clase mediante la interfaz de clase. Por ejemplo:

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

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

En Extensiones administradas esto se hace proporcionando una declaración explícita del método de la interfaz con el nombre completo del método con el nombre de la interfaz. La instancia específica de la clase está incompleta. Esto elimina la necesidad de convertir en un tipo inferior el valor devuelto de Clone, en este ejemplo, cuando se le llama explícitamente mediante una instancia de R.

En la nueva sintaxis, se ha introducido un mecanismo de reemplazo general que reemplaza la sintaxis de Extensiones administradas. Nuestro ejemplo se reescribiría del modo siguiente:

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

Esta revisión requiere que el miembro de interfaz que se está reemplazando explícitamente tenga un nombre único dentro de la clase. En este ejemplo, se ha proporcionado un nombre simple como InterfaceClone. El comportamiento sigue siendo el mismo: una invocación a través de la interfaz ICloneable invoca InterfaceClone, con un nuevo nombre a la vez que una llamada a través de un objeto de tipo R invoca la segunda instancia Clone.

Vea también

Conceptos

Declaraciones de miembros en una clase o interfaz

Referencia

Explicit Overrides