Share via


사용자 지정 특성을 적용하여 IEnumerable 구현

.NET Framework에서 컬렉션의 개체를 나열하는 인터페이스는 IEnumerable 인터페이스를 상속해야 합니다. IEnumerableGetEnumerator라는 메서드 하나를 노출합니다. 관리되지 않은 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 특성을 사용하여 강제로 구현할 수 있습니다.

참고 항목

참조

TypeLibConverter

ITypeLibConverter

Tlbimp.exe(형식 라이브러리 가져오기)

개념

사용자 지정 특성을 적용하여 기본 COM DISPID(디스패치 식별자) 덮어쓰기

사용자 지정 특성을 적용하여 관리되지 않는 COM Get/Set 속성에 태그 지정

형식 라이브러리를 어셈블리로 가져오기