Share via


Application de l'attribut personnalisé pour implémenter IEnumerable

Dans le .NET Framework, les interfaces qui énumèrent des objets d'une collection doivent hériter de l'interface IEnumerable. IEnumerable expose une méthode, GetEnumerator. Les interfaces de dispatch COM non managées contiennent un membre (DISPID_NEWENUM) avec un DISPID spécial (-4) pour indiquer que l'interface est énumérable. À l'importation, l'attribut custom force une interface COM non managée à implémenter IEnumerable. La syntaxe de cet attribut custom est la suivante :

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

L'attribut de bibliothèque de types IEnumerable custom ne peut s'appliquer qu'à une interface de répartition (dispinterface) ou à une interface double.Les interfaces dérivées de IUnknown ne peuvent pas hériter de IEnumerable ; par conséquent, si vous appliquez l'attribut custom à une interface dérivée de IUnknown, l'importateur de bibliothèques de types ignore l'attribut.

Exemple

L'exemple suivant, écrit en langage IDL (Interface Definition language), affiche l'utilisation de l'attribut de bibliothèque de types IEnumerable custom pour forcer IMyClass à hériter de 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;
};

Le MSIL (Microsoft Intermediate Language) qui résulte de l'importation de la bibliothèque de types doit ressembler à ce qui suit :

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

En général, si votre code n'implémente pas IEnumerable après avoir examiné le MSIL, vous pouvez utiliser cet attribut custom pour forcer l'implémentation.

Voir aussi

Référence

TypeLibConverter

ITypeLibConverter

Tlbimp.exe (Type Library Importer)

Concepts

Application de l'attribut personnalisé pour remplacer l'identificateur de dispatch COM (DISPID) par défaut

Application de l'attribut personnalisé aux propriétés COM get/set non managées de balises

Importation d'une bibliothèque de types sous la forme d'un assembly