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

인터페이스를 선언합니다. 네이티브 인터페이스에 대한 자세한 내용은 다음을 참조하세요 __interface.

모든 런타임

구문

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

매개 변수

interface_access
어셈블리 외부에서 인터페이스의 접근성입니다. 가능한 값은 publicprivate입니다. 기본값은 private입니다. 중첩된 인터페이스에는 지정자가 interface_access 있을 수 없습니다.

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

inherit_access
base_interface접근성입니다. 기본 인터페이스에 대해 허용되는 유일한 접근성은 (기본값)입니다 public .

base_interface
(선택 사항) 인터페이스 name에 대한 기본 인터페이스입니다.

설명

interface structinterface class와 동등합니다.

인터페이스에는 함수, 이벤트 및 속성에 대한 선언을 포함할 수 있습니다. 모든 인터페이스 멤버는 public 접근성을 갖습니다. 인터페이스에 정적 데이터 멤버, 함수, 이벤트 및 속성을 포함할 수도 있으며, 이러한 정적 멤버는 인터페이스에서 정의해야 합니다.

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

struct 또는 class 인터페이스에서 파생되는 A는 인터페이스의 모든 멤버를 구현해야 합니다. 인터페이스 name를 구현할 때 목록의 인터페이스 base_interface 도 구현해야 합니다.

자세한 내용은 다음을 참조하세요.

다른 CLR 형식에 대한 자세한 내용은 클래스 및 구조체를 참조하세요.

컴파일 시간에 __is_interface_class(type)을 사용하여 형식이 인터페이스인지 여부를 검색할 수 있습니다. 자세한 내용은 형식 특성에 대한 컴파일러 지원을 참조하세요.

개발 환경에서는 키워드(예 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();
}
in Function_3

in Function_2

in Function_1

8

OnClick: 7, 3.14159

in Function_1

다음 코드 샘플에서는 여러 인터페이스에서 동일한 시그니처를 선언하고 해당 인터페이스를 클래스에서 사용하는 함수를 구현하는 두 가지 방법을 보여 줍니다.

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

참고 항목

.NET 및 UWP용 구성 요소 확장