사용자 지정 특성을 적용하여 IEnumerable 구현
.NET Framework에서 컬렉션의 개체를 나열하는 인터페이스는 IEnumerable 인터페이스를 상속해야 합니다. IEnumerable은 GetEnumerator라는 메서드 하나를 노출합니다. 관리되지 않은 COM 디스패치 인터페이스에는 특별한 DISPID(-4)를 가진 멤버((DISPID_NEWENUM)가 포함되어 해당 인터페이스가 열거 가능한 인터페이스임을 나타냅니다. 가져오기를 수행할 때 custom 특성은 관리되지 않는 COM 인터페이스에서 IEnumerable을 구현하도록 합니다. 이 custom 특성의 구문은 다음과 같습니다.
GUID = B64784EB-D8D4-4d9b-9ACD-0E30806426F7
Value = anything
참고 |
---|
IEnumerable custom 형식 라이브러리 특성은 디스패치 전용 인터페이스(dispinterface)나 이중 인터페이스에만 적용할 수 있습니다.IUnknown에서 파생된 인터페이스는 IEnumerable을 상속할 수 없습니다. 따라서 IUnknown에서 파생된 인터페이스에 custom 특성을 적용하면 형식 라이브러리 가져오기에서 이 특성을 무시합니다. |
예제
IDL(Interface Definition language)로 작성된 다음 예제에서는 IEnumerable custom 형식 라이브러리 특성을 사용하여 IMyClass가 IEnumerable을 상속하도록 하는 방법을 보여 줍니다.
[
object,
uuid(40E86021-CAD7-493B-BF09-43811D821BA7),
dual,
helpstring("IMyClass Interface"),
pointer_default(unique),
// Use the IEnumerable custom attribute.
custom(B64784EB-D8D4-4d9b-9ACD-0E30806426F7,"")
]
interface IMyClass : IDispatch
{
};
[
uuid(3ACBCEB2-9D52-46FA-97E0-063310CFD776),
helpstring("MyClass Class")
]
coclass MyClass
{
[default] interface IMyClass;
};
형식 라이브러리를 가져온 후의 결과 MSIL(Microsoft Intermediate Language)은 다음과 같습니다.
.class interface public abstract auto ansi import IMyClass
implements [mscorlib]System.Collections.IEnumerable
{
...
} // This is the end of class MyClass.
일반적으로 코드에서 MSIL을 검사한 후 IEnumerable을 구현하지 않으면 이 custom 특성을 사용하여 강제로 구현할 수 있습니다.
참고 항목
참조
개념
사용자 지정 특성을 적용하여 기본 COM DISPID(디스패치 식별자) 덮어쓰기