interface class (C++/CLI ve C++/CX)

Bir arabirim bildirir. Yerel arabirimler hakkında bilgi için bkz __interface. .

Tüm çalışma zamanları

Sözdizimi

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

Parametreler

interface_access
Derleme dışındaki bir arabirimin erişilebilirliği. Olası değerler ve privateşeklindedirpublic. private varsayılan değerdir. İç içe arabirimlerin tanımlayıcısı interface_access olamaz.

name
Arabirimin adı.

inherit_access
erişilebilirliği base_interface. Temel arabirim için yalnızca izin verilen erişilebilirlik ( public varsayılandır).

base_interface
(İsteğe bağlı) arabirimi için bir temel arabirim name.

Açıklamalar

interface struct eşdeğeri, interface class olur.

Arabirim işlevler, olaylar ve özellikler için bildirimler içerebilir. Tüm arabirim üyelerinin genel erişilebilirliği vardır. Bir arabirim statik veri üyeleri, işlevler, olaylar ve özellikler de içerebilir ve bu statik üyelerin arabirimde tanımlanması gerekir.

Arabirim, bir sınıfın nasıl uygulanabileceğini tanımlar. Arabirim bir sınıf değildir ve sınıflar yalnızca arabirimler uygulayabilir. Bir sınıf bir arabirimde bildirilen bir işlevi tanımladığında, işlev geçersiz kılınmayan uygulanır. Bu nedenle, ad araması arabirim üyelerini içermez.

Bir class arabirimden türetilen veya struct arabirimin tüm üyelerini uygulamalıdır. arabirimini nameuygularken, listedeki arabirimleri base_interface de uygulamanız gerekir.

Daha fazla bilgi için bkz.

Diğer CLR türleri hakkında bilgi için bkz . Sınıflar ve Yapılar.

Bir tür ile __is_interface_class(type)bir arabirimse derleme zamanında algılayabilirsiniz. Daha fazla bilgi için bkz . Tür özellikleri için derleyici desteği.

Geliştirme ortamında, anahtar sözcüğü vurgulayarak (örneğin, interface class) ve F1 tuşuna basarak bu anahtar sözcüklerle ilgili F1 yardımı alabilirsiniz.

Windows Çalışma Zamanı

Açıklamalar

(Bu dil özelliği için yalnızca Windows Çalışma Zamanı geçerli olan bir açıklama yoktur.)

Gereksinimler

Derleyici seçeneği: /ZW

Ortak Dil Çalışma Zamanı

Açıklamalar

(Bu dil özelliği için yalnızca ortak dil çalışma zamanı için geçerli olan hiçbir açıklama yoktur.)

Gereksinimler

Derleyici seçeneği: /clr

Örnekler

Aşağıdaki kod örneği, bir arabirimin bir saat işlevinin davranışını nasıl tanımlayabileceğini gösterir.

// 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

Aşağıdaki kod örneği, birden çok arabirimde bildirilen ve bu arabirimlerin bir sınıf tarafından kullanıldığı aynı imzaya sahip işlevleri uygulamanın iki yolunu gösterir.

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

Ayrıca bkz.

.NET ve UWP İçin Bileşen Uzantıları