다음을 통해 공유


interface 클래스(C++ 구성 요소 확장)

인터페이스를 선언합니다. 네이티브 인터페이스에 대한 자세한 내용은 인터페이스를 참조하십시오.

모든 런타임

구문

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

매개 변수

  • interface_access
    어셈블리 외부에서 인터페이스의 액세스 가능성입니다. 가능한 값은 public 및 private이고 기본값은 private입니다. 중첩된 인터페이스는 interface_access 지정자를 사용할 수 없습니다.

  • name
    인터페이스의 이름입니다.

  • inherit_access
    base_interface의 액세스 가능성. 기본 인터페이스에 대한 허용된 필요한 옵션은 public (기본값)인 경우뿐입니다.

  • base_interface(선택적 요소)
    name 인터페이스의 기본 인터페이스.

설명

구조체 인터페이스인터페이스 클래스에 해당합니다.

인터페이스는 함수, 이벤트 및 속성에 대한 선언이 포함될 수 있습니다. 모든 인터페이스 멤버는 공용 액세스 가능성을 포함합니다. 정적 데이터 멤버, 함수, 이벤트 및 속성을 인터페이스에 포함될 수도 있습니다. 인터페이스는 이러한 정적 멤버를 정의해야 합니다.

인터페이스는 클래스는 구현하는 방법을 정의합니다. 인터페이스는 클래스가 아닙니다. 클래스는 오직 인터페이스만을 구현할 수 있습니다. 클래스 인터페이스에 선언 된 함수를 정의하는 경우 재정의되지 않은 함수 구현됩니다. 따라서 이름 조회는 인터페이스 멤버를 포함하지 않습니다.

인터페이스에서 상속되는 클래스나 상수는 모든 인터페이스 멤버를 구현해야 합니다. 이름 인터페이스를 구현할 때, base_interface 목록에 인터페이스를 반드시 구현해야 합니다.

자세한 내용은 다음을 참조하십시오.

다른 CLR 형식에 대한 정보를 보려면 클래스와 구조체를 참조하십시오.

__is_interface_class( type ) 형식이 있는 경우 컴파일 타임을 감지할 수 있습니다. 자세한 내용은 형식 특성에 대한 컴파일러 지원(C++ 구성 요소 확장)을 참조하십시오.

개발 환경에서 키워드를 강조 표시하여(예: interface class) F1을 누르면 키워드에 대한 F1 도움말을 볼 수 있습니다.

Windows 런타임

설명

(이 언어 기능에는 Windows 런타임에만 적용되는 설명이 없습니다.)

요구 사항

컴파일러 옵션: /ZW

공용 언어 런타임

설명

(이 언어 기능에는 공용 언어 런타임에만 적용되는 설명이 없습니다.)

요구 사항

컴파일러 옵션: /clr

예제

예제

다음 코드 예제에서는 인터페이스 시계 함수의 동작을 정의하는 방법을 보여줍니다.

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

참고 항목

개념

런타임 플랫폼의 구성 요소 확장