interface class
(C++/CLI dan C++/CX)
Mendeklarasikan antarmuka. Untuk informasi tentang antarmuka asli, lihat __interface
.
Semua runtime
Sintaks
interface_access interface class name : inherit_access base_interface {};
interface_access interface struct name : inherit_access base_interface {};
Parameter
interface_access
Aksesibilitas antarmuka di luar perakitan. Nilai yang mungkin adalah public
dan private
. private
adalah defaultnya. Antarmuka berlapis tidak dapat memiliki penentu interface_access
.
name
Nama antarmuka.
inherit_access
Aksesibilitas base_interface
. Satu-satunya aksesibilitas yang diizinkan untuk antarmuka dasar adalah public
(default).
base_interface
(Opsional) Antarmuka dasar untuk antarmuka name
.
Keterangan
interface struct
setara dengan interface class
.
Antarmuka dapat berisi deklarasi untuk fungsi, peristiwa, dan properti. Semua anggota antarmuka memiliki aksesibilitas publik. Antarmuka juga dapat berisi anggota data statis, fungsi, peristiwa, dan properti, dan anggota statis ini harus didefinisikan dalam antarmuka.
Antarmuka menentukan bagaimana kelas dapat diimplementasikan. Antarmuka bukan kelas dan kelas hanya dapat mengimplementasikan antarmuka. Ketika kelas mendefinisikan fungsi yang dideklarasikan dalam antarmuka, fungsi diimplementasikan, tidak ditimpa. Oleh karena itu, pencarian nama tidak menyertakan anggota antarmuka.
Atau class
struct
yang berasal dari antarmuka harus mengimplementasikan semua anggota antarmuka. Saat menerapkan antarmuka name
, Anda juga harus mengimplementasikan antarmuka dalam base_interface
daftar.
Untuk informasi selengkapnya, lihat:
Untuk informasi tentang jenis CLR lainnya, lihat Kelas dan Struktur.
Anda dapat mendeteksi pada waktu kompilasi jika jenis adalah antarmuka dengan __is_interface_class(type)
. Untuk informasi selengkapnya, lihat Dukungan pengkompilasi untuk sifat jenis.
Di lingkungan pengembangan, Anda bisa mendapatkan bantuan F1 pada kata kunci ini dengan menyoroti kata kunci (misalnya, interface class
) dan menekan F1.
Windows Runtime
Keterangan
(Tidak ada keterangan untuk fitur bahasa ini yang hanya berlaku untuk Windows Runtime.)
Persyaratan
Opsi pengkompilasi: /ZW
Runtime Bahasa Umum
Keterangan
(Tidak ada keterangan untuk fitur bahasa ini yang hanya berlaku untuk runtime bahasa umum.)
Persyaratan
Opsi pengkompilasi: /clr
Contoh
Contoh kode berikut menunjukkan bagaimana antarmuka dapat menentukan perilaku fungsi jam.
// 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
Sampel kode berikut menunjukkan dua cara untuk mengimplementasikan fungsi dengan tanda tangan yang sama yang dideklarasikan dalam beberapa antarmuka dan di mana antarmuka tersebut digunakan oleh kelas.
// 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 {}
};