Применение настраиваемого атрибута для реализации интерфейса IEnumerable

В среде .NET Framework интерфейсы, перечисляющие объекты в коллекции, должны наследовать интерфейс IEnumerable. Интерфейс IEnumerable предоставляет один метод, GetEnumerator. Неуправляемые диспетчерские COM-интерфейсы содержат член (DISPID_NEWENUM) со специальным идентификаторов DISPID (-4), показывающим, что этот интерфейс является перечислимым. При импорте атрибут custom заставляет неуправляемый COM-интерфейс реализовывать интерфейс IEnumerable. Для этого атрибута custom используется следующий синтаксис.

GUID = B64784EB-D8D4-4d9b-9ACD-0E30806426F7
Value = anything
ПримечаниеПримечание

Атрибут библиотеки типов IEnumerable custom можно применить только к интерфейсу диспетчеризации или к сдвоенному интерфейсу.Интерфейсы, производные от интерфейса IUnknown, не могут наследовать IEnumerable; следовательно, если к интерфейсу, производному от IUnknown, применяется атрибут custom, программа импорта библиотеки типов игнорирует атрибут.

Пример

В следующем примере, написанном на языке IDL, показано использование атрибута библиотеки типов 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 будет выглядеть примерно следующим образом.

.class interface public abstract auto ansi import IMyClass
implements [mscorlib]System.Collections.IEnumerable 
{
...
} // This is the end of class MyClass.

В общем случае, если код не реализует интерфейс IEnumerable после проверки MSIL, можно использовать этот атрибут custom, чтобы принудительно использовать реализацию.

См. также

Ссылки

TypeLibConverter

ITypeLibConverter

Tlbimp.exe (программа экспорта библиотек типов)

Основные понятия

Применение атрибута custom для переопределения идентификатора диспетчеризации (DISPID) COM по умолчанию.

Применение атрибута custom, чтобы пометить неуправляемые свойства Get/Set модели COM

Импорт библиотеки типов в виде сборки