Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Declareert een interface. Zie voor meer informatie over systeemeigen interfaces __interface.
Alle runtimes
Syntaxis
interface_access interface class name : inherit_access base_interface {};
interface_access interface struct name : inherit_access base_interface {};
Parameterwaarden
interface_access
De toegankelijkheid van een interface buiten de assembly. Mogelijke waarden zijn public en private.
private is de standaardwaarde. Geneste interfaces kunnen geen aanduiding hebben interface_access .
name
De naam van de interface.
inherit_access
De toegankelijkheid van base_interface. De enige toegestane toegankelijkheid voor een basisinterface is public (de standaardinstelling).
base_interface
(Optioneel) Een basisinterface voor interface name.
Opmerkingen
interface struct is equivalent aan interface class.
Een interface kan declaraties bevatten voor functies, gebeurtenissen en eigenschappen. Alle interfaceleden hebben openbare toegankelijkheid. Een interface kan ook statische gegevensleden, functies, gebeurtenissen en eigenschappen bevatten, en deze statische leden moeten worden gedefinieerd in de interface.
Een interface definieert hoe een klasse kan worden geïmplementeerd. Een interface is geen klasse en klassen kunnen alleen interfaces implementeren. Wanneer een klasse een functie definieert die in een interface is gedeclareerd, wordt de functie geïmplementeerd, niet overschreven. Naamzoekactie bevat daarom geen interfaceleden.
Een class of struct die is afgeleid van een interface, moet alle leden van de interface implementeren. Bij het implementeren van de interface namemoet u ook de interfaces in de base_interface lijst implementeren.
Voor meer informatie, zie:
Zie Klassen en Structs voor meer informatie over andere CLR-typen.
U kunt tijdens het compileren detecteren als een type een interface is met __is_interface_class(type). Zie Compiler-ondersteuning voor typeeigenschappen voor meer informatie.
In de ontwikkelomgeving kunt u F1-hulp krijgen bij deze trefwoorden door het trefwoord (bijvoorbeeld interface class) te markeren en op F1 te drukken.
Windows Runtime
Opmerkingen
(Er zijn geen opmerkingen voor deze taalfunctie die alleen van toepassing zijn op Windows Runtime.)
Behoeften
Compileroptie: /ZW
Gemeenschappelijke Taaluitvoeringsomgeving
Opmerkingen
(Er zijn geen opmerkingen voor deze taalfunctie die alleen van toepassing zijn op de algemene taalruntime.)
Behoeften
Compileroptie: /clr
Voorbeelden
In het volgende codevoorbeeld ziet u hoe een interface het gedrag van een klokfunctie kan definiëren.
// 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
In het volgende codevoorbeeld ziet u twee manieren om functies te implementeren met dezelfde handtekening die is gedeclareerd in meerdere interfaces en waar deze interfaces door een klasse worden gebruikt.
// 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 {}
};