Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Deklaruje interfejs. Aby uzyskać informacje na temat interfejsów natywnych, zobacz __interface.
Wszystkie środowiska uruchomieniowe
Składnia
interface_access interface class name : inherit_access base_interface {};
interface_access interface struct name : inherit_access base_interface {};
Parametry
interface_access
Ułatwienia dostępu interfejsu poza zestawem. Możliwe wartości to public i private. Wartość domyślna to private. Zagnieżdżone interfejsy nie mogą mieć specyfikatora interface_access .
name
Nazwa interfejsu.
inherit_access
Ułatwienia dostępu w pliku base_interface. Jedynym dozwolonym dostępem dla interfejsu podstawowego jest public (ustawienie domyślne).
base_interface
(Opcjonalnie) Podstawowy interfejs dla interfejsu name.
Uwagi
interface struct jest równoważne z interface class.
Interfejs może zawierać deklaracje funkcji, zdarzeń i właściwości. Wszystkie elementy członkowskie interfejsu mają publiczne ułatwienia dostępu. Interfejs może również zawierać statyczne elementy członkowskie danych, funkcje, zdarzenia i właściwości, a te statyczne elementy członkowskie muszą być zdefiniowane w interfejsie.
Interfejs definiuje sposób implementacji klasy. Interfejs nie jest klasą, a klasy mogą implementować tylko interfejsy. Gdy klasa definiuje funkcję zadeklarowaną w interfejsie, funkcja jest implementowana, a nie zastępowana. W związku z tym wyszukiwanie nazw nie zawiera elementów członkowskich interfejsu.
Element class lub struct pochodzący z interfejsu musi implementować wszystkie elementy członkowskie interfejsu. Podczas implementowania interfejsu namenależy również zaimplementować interfejsy na base_interface liście.
Aby uzyskać więcej informacji, zobacz:
Aby uzyskać informacje na temat innych typów CLR, zobacz Klasy i struktury.
W czasie kompilacji można wykryć, czy typ jest interfejsem za pomocą __is_interface_class(type)polecenia . Aby uzyskać więcej informacji, zobacz Obsługa kompilatora dla cech typów.
W środowisku deweloperów możesz uzyskać pomoc F1 dotyczącą tych słów kluczowych, wyróżniając słowo kluczowe (na przykład interface class) i naciskając F1.
Środowisko wykonawcze systemu Windows
Uwagi
(Nie ma żadnych uwag dotyczących tej funkcji językowej, które mają zastosowanie tylko do środowisko wykonawcze systemu Windows).
Wymagania
Opcja kompilatora: /ZW
środowiska uruchomieniowe w trakcie wykonania
Uwagi
(Nie ma żadnych uwag dotyczących tej funkcji języka, które mają zastosowanie tylko do środowiska uruchomieniowego języka wspólnego).
Wymagania
Opcja kompilatora: /clr
Przykłady
W poniższym przykładzie kodu pokazano, jak interfejs może definiować zachowanie funkcji zegara.
// 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
Poniższy przykład kodu przedstawia dwa sposoby implementowania funkcji z tym samym podpisem zadeklarowanym w wielu interfejsach i gdzie te interfejsy są używane przez klasę.
// 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 {}
};
Zobacz też
Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows