共用方式為


interface class (C++ 元件擴充功能)

宣告一個介面。 在原生介面上的資訊,請參閱 __interface

所有的執行階段

語法

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

參數

  • interface_access
    在組件外部介面的存取範圍。 可能的值為公用和private。 private 為預設值。 不能有巢狀的介面 interface_access 規範。

  • name
    介面的名稱。

  • inherit_access
    存取範圍的 base_interface。 唯一可行協助工具的基底介面是public (預設值)。

  • base_interface (可省略)
    介面的基底介面名稱。

備註

介面結構 相當於 界面類別

介面可以包含宣告的函式、 事件和屬性。 所有介面成員都有公用存取範圍。 靜態資料成員、 函式、 事件及工具] 功能表,也可以包含一個介面,必須在介面中定義這些靜態成員。

介面會定義一個類別可以實作的方式。 介面不是類別,類別只能實作介面。 當類別定義介面中宣告的函式時,函式實作後,不會被覆寫。 因此,名稱搜尋不包含介面成員。

類別或衍生自介面的結構必須實作該介面的所有成員。 實作介面時名稱您尚必須實作的介面,在base_interface清單。

如需詳細資訊,請參閱:

如需其他 CLR 型別資訊,請參閱類別和結構

如果型別是一個包含介面,可偵測編譯時期__is_interface_class(type)。 如需詳細資訊,請參閱型別特性的編譯器支援 (C++ 元件擴充功能)

在開發環境中,您可以取得 F1 說明這些關鍵字是反白顯示關鍵字,(interface class,例如),然後按 F1。

Windows 執行階段

備註

(還有沒有此語言功能的註解適用於 Windows 執行階段)。

737cydt1.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/ZW

Common Language Runtime

備註

(還有適用於只 common language runtime 此語言功能的任何註解)。

737cydt1.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/clr

737cydt1.collapse_all(zh-tw,VS.110).gif範例

範例

下列程式碼範例會示範介面可以如何定義時鐘函式的行為。

// 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();
}

Output

  
  
  
  
  
  

範例

下列程式碼範例示範兩種方式可以實作的函式宣告在多個介面,並且讓這些介面可供類別的簽名碼相同。

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

請參閱

概念

執行階段平台的元件擴充功能