Condividi tramite


Applicazione dell'attributo personalizzato per implementare IEnumerable

In .NET Framework, le interfacce contenenti enumerazioni di oggetti di un insieme devono ereditare l'interfaccia IEnumerable. IEnumerable espone un solo metodo, GetEnumerator. Le interfacce dispatch COM non gestite contengono un membro (DISPID_NEWENUM) con un DISPID (-4) speciale che indica che l'interfaccia è enumerabile. Durante l'importazione, l'attributo custom impone l'implementazione di IEnumerable a un'interfaccia COM non gestita. La sintassi di questo attributo custom è la seguente:

GUID = B64784EB-D8D4-4d9b-9ACD-0E30806426F7
Value = anything
NotaNota

L'attributo IEnumerable custom della libreria dei tipi può essere applicato esclusivamente a un'interfaccia solo dispatch (dispinterface) o a un'interfaccia duale.Le interfacce derivate da IUnknown non possono ereditare IEnumerable. Pertanto, se si applica l'attributo personalizzato a un'interfaccia derivata da IUnknown, l'utilità di importazione della libreria dei tipi ignorerà l'attributo.

Esempio

Nell'esempio riportato di seguito, scritto nel linguaggio IDL (Interface Definition Language), viene illustrato l'utilizzo dell'attributo della libreria dei tipi IEnumerable custom per imporre a IMyClass di ereditare 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;
};

Il codice MSIL (Microsoft Intermediate Language) generato al termine dell'importazione della libreria dei tipi risulterà simile al seguente:

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

In generale, se il codice non implementa IEnumerable dopo avere analizzato MSIL, è possibile utilizzare questo attributo custom per imporre l'implementazione.

Vedere anche

Riferimenti

TypeLibConverter

ITypeLibConverter

Tlbimp.exe (utilità di importazione della libreria dei tipi)

Concetti

Applicazione dell'attributo personalizzato per sovrascrivere il DISPID COM predefinito

Applicazione dell'attributo personalizzato per rendere con tag le proprietà COM get/set non gestite

Importazione di una libreria dei tipi come assembly