Compartilhar via


Substituir explícita de um membro de Interface

A sintaxe para declarar uma substituir explícita de um membro de interface dentro de uma classe foi alterado de Managed Extensions for C++ para Visual C++.

Você geralmente deseja fornecer duas instâncias de um membro de interface dentro de uma classe que implementa a interface – uma que é usada 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.Por exemplo:

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

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

Nas extensões gerenciado fazemos isso fornecendo uma declaração explícita do método de interface com o nome do método qualificado com o nome da interface.A instância de classe específica não é qualificada.Isso elimina a necessidade precise o valor de retorno 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 explicitamente que está sendo substituído seja recebe um nome exclusivo dentro da classe.Aqui, forneci o nome estranho do InterfaceClone.O comportamento ainda é o mesmo – uma chamada por meio de ICloneable interface invoca renomeadas InterfaceClone, enquanto uma chamada por meio de um objeto do tipo R invoca o segundo Clone instância.

Consulte também

Referência

Substituições Explícitas (Extensões de Componentes C++)

Conceitos

Declarações de membro em uma classe ou uma interface (C++/CLI)