classe d’interface (C++/CLI et C++/CX)interface class (C++/CLI and C++/CX)

Déclare une interface.Declares an interface. Pour plus d’informations sur les interfaces natives, consultez __interface.For information on native interfaces, see __interface.

Tous les runtimesAll Runtimes

SyntaxeSyntax

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

ParamètresParameters

interface_accessinterface_access
L’accessibilité d’une interface en dehors de l’assembly.The accessibility of an interface outside the assembly. Les valeurs possibles sont public et private .Possible values are public and private. private est la valeur par défaut.private is the default. Les interfaces imbriquées ne peuvent pas disposer d’un spécificateur interface_access.Nested interfaces cannot have an interface_access specifier.

namename
Nom de l’interface.The name of the interface.

inherit_accessinherit_access
L’accessibilité de base_interface.The accessibility of base_interface. La seule accessibilité autorisée pour une interface de base est public (valeur par défaut).The only permitted accessibility for a base interface is public (the default).

base_interfacebase_interface
(Facultatif) Interface de base pour le nom de l’interface.(Optional) A base interface for interface name.

NotesRemarks

interface struct équivaut à interface class.interface struct is equivalent to interface class.

Une interface peut contenir des déclarations de fonctions, d’événements et de propriétés.An interface can contain declarations for functions, events, and properties. Tous les membres d’interface disposent d’une accessibilité publique.All interface members have public accessibility. Une interface peut également contenir des propriétés, des événements, des fonctions et des membres de données statiques. Ces membres statiques doivent être définis dans l’interface.An interface can also contain static data members, functions, events, and properties, and these static members must be defined in the interface.

Une interface définit comment une classe peut être implémentée.An interface defines how a class may be implemented. Une interface n’est pas une classe et les classes peuvent uniquement implémenter des interfaces.An interface is not a class and classes can only implement interfaces. Lorsqu’une classe définit une fonction déclarée dans une interface, la fonction est implémentée, et non pas remplacée.When a class defines a function declared in an interface, the function is implemented, not overridden. Par conséquent, la recherche de nom n’inclut pas les membres d’interface.Therefore, name lookup does not include interface members.

Une classe ou un struct qui dérivent d’une interface doivent implémenter tous les membres de l’interface.A class or struct that derives from an interface must implement all members of the interface. Lors de l’implémentation du nom de l’interface, vous devez également implémenter les interfaces dans la liste base_interface.When implementing interface name you must also implement the interfaces in the base_interface list.

Pour plus d'informations, consultez les pages suivantes :For more information, see:

Pour plus d’informations sur les autres types CLR, consultez Classes et structs.For information on other CLR types, see Classes and Structs.

Au moment de la compilation, vous pouvez détecter si un type est une interface avec __is_interface_class(type).You can detect at compile time if a type is an interface with __is_interface_class(type). Pour plus d’informations, consultez Prise en charge du compilateur pour les caractéristiques de type.For more information, see Compiler Support for Type Traits.

Dans l’environnement de développement, vous pouvez obtenir de l’aide via la touche F1 sur ces mots clés en mettant en surbrillance le mot clé ( interface class , par exemple) et en appuyant sur F1.In the development environment, you can get F1 help on these keywords by highlighting the keyword, (interface class, for example) and pressing F1.

Windows RuntimeWindows Runtime

NotesRemarks

(Aucune note de cette fonctionnalité de langage ne s’applique qu’au Windows Runtime.)(There are no remarks for this language feature that apply to only the Windows Runtime.)

SpécificationsRequirements

Option du compilateur : /ZWCompiler option: /ZW

Common Language RuntimeCommon Language Runtime

NotesRemarks

(Aucune note de cette fonctionnalité de langage ne s’applique qu’au Common Language Runtime.)(There are no remarks for this language feature that apply to only the common language runtime.)

SpécificationsRequirements

Option du compilateur : /clrCompiler option: /clr

ExemplesExamples

L’exemple de code suivant montre comment une interface peut définir le comportement d’une fonction d’horloge.The following code example demonstrates how an interface can define the behavior of a clock function.

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

in Function_2

in Function_1

8

OnClick: 7, 3.14159

in Function_1

L’exemple de code suivant montre deux manières d’implémenter des fonctions avec la même signature déclarée dans plusieurs interfaces et dans l’emplacement dans lequel ces interfaces sont utilisées par une classe.The following code sample shows two ways to implement functions with the same signature declared in multiple interfaces and where those interfaces are used by a class.

// 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 {}
};

Voir aussiSee also

Extensions de composant pour .NET et UWPComponent Extensions for .NET and UWP