interface class (rozšíření komponent C++)
Deklaruje rozhraní. Informace o nativní rozhraní naleznete v tématu __interface.
Všechny moduly runtime
Syntax
interface_access interface class name : inherit_access base_interface {};
interface_access interface struct name : inherit_access base_interface {};
Parametry
interface_access
Usnadnění rozhraní mimo sestavení. Možné hodnoty jsou veřejné a private. privateje výchozí. Vnořené rozhraní nemůže mít interface_access specifikátor.name
Název rozhraní.inherit_access
Přístupnost typu base_interface. Pouze povolené pro usnadnění je základní rozhraní public (výchozí).base_interface (volitelné)
Základní rozhraní pro rozhraní name.
Poznámky
rozhraní struct je ekvivalentní rozhraní třídy.
Rozhraní může obsahovat deklarace funkce, vlastnosti a události. Všechny členy rozhraní mít veřejnou přístupnost.Rozhraní může také obsahovat statické datové členy, funkce, vlastnosti a události a musí být tyto statické členy definované v rozhraní.
Rozhraní definuje, jak může implementovat třídu.Rozhraní není třídy a třídy mohou implementovat pouze rozhraní.Pokud třída definuje funkce deklarované v rozhraní, je implementována funkce, není přepsán.Vyhledávání názvu tedy neobsahuje členy rozhraní.
Všechny členy rozhraní musí implementovat třídu nebo strukturu, která je odvozena z rozhraní.Při implementaci rozhraní jméno musíte také implementovat rozhraní v base_interface seznam.
Další informace naleznete v části:
Informace o další typy CLR naleznete v tématu třídy a struktur.
V době kompilace můžete zjistit, je-li typ rozhraní s __is_interface_class(type).Další informace naleznete v tématu Podpora kompilátoru pro typové vlastnosti (C++ Component Extensions).
Ve vývojovém prostředí, můžete získat nápovědu F1 na těchto klíčových slov pomocí klíčového slova, zvýraznění (interface class, například) a stisknutím klávesy F1.
prostředí Windows Runtime
Poznámky
(Žádné informace o této funkci jazyka neplatí pouze pro architekturu Windows Runtime.)
Požadavky
Možnost kompilátoru: /ZW
Common Language Runtime
Poznámky
(Nejsou k dispozici žádné informace o této funkci jazyka, které platí pouze pro modul Common Language Runtime.)
Požadavky
Možnost kompilátoru: /clr
Příklady
Příklad
Následující příklad kódu ukazuje, jak lze rozhraní definují chování funkce hodin.
// 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();
}
Výsledek
Příklad
Následující příklad kódu ukazuje dva způsoby, jak implementovat funkce se stejnou signaturou deklarován ve více rozhraní a použití těchto rozhraní třídou.
// 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 {}
};