Compartilhar via


classe de interface (Extensões de Componentes C++)

Declara uma interface.Para obter informações sobre interfaces nativas, consulte __interface.

Todos os tempos de execução

Sintaxe

interface_access interface class  name :  inherit_access base_interface {};
interface_access interface struct name :  inherit_access base_interface {};

Parâmetros

  • interface_access
    A acessibilidade de uma interface fora do assembly.Os valores possíveis são pública e private.privateé o padrão.Interfaces aninhados não podem ter um interface_access especificador.

  • nome
    O nome da interface.

  • inherit_access
    A acessibilidade de base_interface.O único permitido acessibilidade para uma interface de base é public (padrão).

  • base_interface (opcional)
    Uma interface para a interface base nome.

Comentários

interface struct é equivalente a classe de interface.

Uma interface pode conter declarações de funções, propriedades e eventos.Todos os membros de interface tem acessibilidade pública.Uma interface também pode conter propriedades, funções, eventos e membros de dados estáticos e esses membros estáticos devem ser definidos na interface.

Uma interface define como uma classe pode ser implementada.Uma interface não é uma classe e classes somente podem implementar interfaces.Quando uma classe define uma função declarada na interface, a função é implementada, não substituído.Portanto, a pesquisa de nome não incluir membros de interface.

Uma classe ou struct que deriva de uma interface deve implementar todos os membros da interface.Ao implementar a interface nome também deve implementar as interfaces de base_interface lista.

Para obter mais informações, consulte:

Para obter informações sobre outros tipos CLR, consulte Classes e estruturas.

Você pode detectar em tempo de compilação se um tipo é uma interface com __is_interface_class(type).Para mais informações, consulte Suporte para Compilador de Traços de Tipo (Extensões de Componentes C++).

No ambiente de desenvolvimento, você pode obter ajuda de F1 essas palavras-chave, destacando a palavra-chave, (interface class, por exemplo) e pressionando F1.

Tempo de Execução do Windows

Comentários

(Não há nenhum comentários para esse recurso de linguagem que se aplicam somente ao runtime do Windows.)

737cydt1.collapse_all(pt-br,VS.110).gifRequisitos

Opção de compilador:/ZW

Common Language Runtime

Comentários

(Existem sem comentários para esse recurso de linguagem que se aplicam a apenas o common language runtime).

737cydt1.collapse_all(pt-br,VS.110).gifRequisitos

Opção de compilador:/clr

737cydt1.collapse_all(pt-br,VS.110).gifExemplos

Exemplo

O exemplo de código a seguir demonstra como uma interface pode definir o comportamento de uma função de relógio.

// mcppv2_interface_class.cpp
// compile with: /clr
using namespace System;

public delegate void ClickEventHandler(int, double);

// define interface with nested interface
public interface class Interface_A {
   void Function_1();

   interface class Interface_Nested_A {
      void Function_2();
   };
};

// interface with a base interface
public interface class Interface_B : Interface_A {
   property int Property_Block;
   event ClickEventHandler^ OnClick;   
   static void Function_3() { Console::WriteLine("in Function_3"); }
};

// implement nested interface
public ref class MyClass : public Interface_A::Interface_Nested_A {
public:
   virtual void Function_2() { Console::WriteLine("in Function_2"); }
};

// implement interface and base interface
public ref class MyClass2 : public Interface_B {
private:
   int MyInt;

public:
   // implement non-static function
   virtual void Function_1() { Console::WriteLine("in Function_1"); }

   // implement property
   property int Property_Block {
      virtual int get() { return MyInt; }
      virtual void set(int value) { MyInt = value; }
   }
   // implement event
   virtual event ClickEventHandler^ OnClick;

   void FireEvents() {
      OnClick(7, 3.14159);
   }
};

// class that defines method called when event occurs
ref class EventReceiver {
public:
   void OnMyClick(int i, double d) {
      Console::WriteLine("OnClick: {0}, {1}", i, d);
   }
};

int main() {
   // call static function in an interface
   Interface_B::Function_3();

   // instantiate class that implements nested interface
   MyClass ^ x = gcnew MyClass;
   x->Function_2();

   // instantiate class that implements interface with base interface
   MyClass2 ^ y = gcnew MyClass2;
   y->Function_1();
   y->Property_Block = 8;
   Console::WriteLine(y->Property_Block);

   EventReceiver^ MyEventReceiver = gcnew EventReceiver();

   // hook handler to event
   y->OnClick += gcnew ClickEventHandler(MyEventReceiver, &EventReceiver::OnMyClick);

   // invoke events
   y->FireEvents();

   // unhook handler to event
   y->OnClick -= gcnew ClickEventHandler(MyEventReceiver, &EventReceiver::OnMyClick);

   // call implemented function via interface handle
   Interface_A^ hi = gcnew MyClass2();
   hi->Function_1();
}

Saída

  
  
  
  
  
  

Exemplo

O exemplo de código a seguir mostra duas maneiras de implementar funções com a mesma assinatura declarada em várias interfaces e onde essas interfaces são usadas por uma classe.

// mcppv2_interface_class_2.cpp
// compile with: /clr /c
interface class I {
   void Test();
   void Test2();
};

interface class J : I {
   void Test();
   void Test2();
};

ref struct R : I, J {
   // satisfies the requirement to implement Test in both interfaces
   virtual void Test() {}

   // implement both interface functions with explicit overrides
   virtual void A() = I::Test2 {}
   virtual void B() = J::Test2 {}
};

Consulte também

Conceitos

Extensões de componente para plataformas de tempo de execução