Partilhar via


Substituição explícita de um membro de Interface

A sintaxe para declarar uma substituição explícita de um membro de interface dentro de uma classe foi alterado a partir de Managed Extensions for C++ para Visual C++ 2010.

Geralmente, você deseja fornecer duas instâncias de um membro de interface dentro de uma classe que implementa a interface – um que é usado quando os objetos de classe são manipulados através de um identificador de interface e é usado quando os objetos de classe são usados por meio da interface de classe. For example:

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

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

No Managed Extensions fazemos isso fornecendo uma declaração explícita do método de interface com o nome do método que qualificado com o nome da interface. A instância de classe específica é qualificada. Isso elimina a necessidade de lançamento decrescente o valor de retorno de Clone, neste exemplo, quando uma chamada explícita por meio de uma instância de R.

Na sintaxe de novo, um mecanismo de substituição geral foi introduzido que substitui a sintaxe de Managed Extensions. Nosso exemplo poderia ser reescrito da seguinte maneira:

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 revisão requer que o membro de interface seja substituído explicitamente recebe um nome exclusivo dentro da classe. Aqui, forneci o estranho nome do InterfaceClone. O comportamento ainda é o mesmo – uma invocação através do ICloneable interface invoca renomeadas InterfaceClone, durante uma chamada por meio de um objeto do tipo R invoca a segunda Clone instância.

Consulte também

Referência

Explicit Overrides

Conceitos

Declarações de membro dentro de uma classe ou Interface