Partilhar via


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

A sintaxe para declarar uma substituição explícita de um membro da interface em uma classe foi alterada de extensões gerenciadas para C++ a Visual C++.

Com frequência você deseja fornecer duas instâncias de um membro da interface em uma classe que implementa a interface – uma que é usada quando os objetos da classe são manipulados por meio de um identificador da interface, e uma que é usada quando os objetos da classe são usados na interface da 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();
};

Extensões gerenciadas em nós faça isso fornecendo uma declaração explícita do método da interface do nome do método qualificado com o nome da interface. A classe é instância específica não qualificado. Isso eliminar a necessidade de entrada aérea do valor de retorno de Clone, neste exemplo, quando chamado explícito em uma instância de R.

Na nova sintaxe, substituindo um mecanismo geral foi introduzido que substitui a sintaxe gerenciado das extensões. Nosso exemplo seria reescrito como 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();
};

Essa análise requer que o membro da interface que está sendo substituído explicitamente foi fornecido um nome exclusivo dentro da classe. Aqui, eu forneci o nome de InterfaceCloneinadequado. O comportamento ainda é o mesmo – uma invocação por meio da interface de ICloneable invoca InterfaceClone, renomeados quando uma chamada por meio de um objeto do tipo R invocar a segunda instância de Clone .

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)