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
어셈블리 외부에서 인터페이스의 접근성입니다. 가능한 값은 public
및 private
입니다. 기본값은 private
입니다. 중첩된 인터페이스에는 지정자가 interface_access
있을 수 없습니다.
name
인터페이스의 이름입니다.
inherit_access
의 base_interface
접근성입니다. 기본 인터페이스에 대해 허용되는 유일한 접근성은 (기본값)입니다 public
.
base_interface
(선택 사항) 인터페이스 name
에 대한 기본 인터페이스입니다.
설명
interface struct
는 interface class
와 같습니다.
인터페이스에는 함수, 이벤트 및 속성에 대한 선언을 포함할 수 있습니다. 모든 인터페이스 멤버는 public 접근성을 갖습니다. 인터페이스에 정적 데이터 멤버, 함수, 이벤트 및 속성을 포함할 수도 있으며, 이러한 정적 멤버는 인터페이스에서 정의해야 합니다.
인터페이스는 클래스를 구현할 수 있는 방법을 정의합니다. 인터페이스는 클래스가 아니며 클래스는 인터페이스만 구현할 수 있습니다. 클래스가 인터페이스에서 선언된 함수를 정의하는 경우 함수가 재정의되지 않고 구현됩니다. 따라서 이름 조회에는 인터페이스 멤버가 포함되지 않습니다.
A class
또는 struct
인터페이스에서 파생 된 인터페이스의 모든 멤버를 구현 해야 합니다. 인터페이스 name
를 구현할 때 목록의 인터페이스 base_interface
도 구현해야 합니다.
자세한 내용은 다음을 참조하세요.
다른 CLR 형식에 대한 자세한 내용은 클래스 및 구조체를 참조하세요.
컴파일 시간에 __is_interface_class(type)
을 사용하여 형식이 인터페이스인지 여부를 검색할 수 있습니다. 자세한 내용은 형식 특성에 대한 컴파일러 지원을 참조 하세요.
개발 환경에서는 키워드(예 interface class
: )를 강조 표시하고 F1 키를 눌러 이러한 키워드에 대한 F1 도움말을 얻을 수 있습니다.
Windows Runtime
설명
(이 언어 기능에는 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 {}
};