Freigeben über


Anwenden des custom-Attributs zum Implementieren von IEnumerable

Aktualisiert: November 2007

In .NET Framework müssen Schnittstellen, die Objekte auflisten, die IEnumerable-Schnittstelle erben. IEnumerable stellt eine Methode zur Verfügung, nämlich GetEnumerator. Nicht verwaltete COM-Dispatchschnittstellen enthalten einen Member (DISPID_NEWENUM) mit einer speziellen DISPID (-4), wodurch angegeben wird, dass es sich um eine Schnittstelle handelt, die das Auflisten unterstützt. Nach dem Importieren erzwingt das custom-Attribut von einer nicht verwalteten COM-Schnittstelle die Implementierung von IEnumerable. Die Syntax dieses custom-Attributs sieht folgendermaßen aus:

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

Sie können das benutzerdefinierte IEnumerable-Typbibliotheksattribut nur auf eine Schnittstelle, die auf Dispatch beschränkt ist (Disp-Schnittstelle), oder auf eine duale Schnittstelle anwenden. Von IUnknown abgeleitete Schnittstellen können IEnumerable nicht erben. Wenn Sie das custom-Attribut auf eine von IUnknown abgeleitete Schnittstelle anwenden, wird dieses daher vom Typbibliothekimporter ignoriert.

Beispiel

Das folgende, in IDL (Interface Definition Language) geschriebene Beispiel veranschaulicht die Verwendung des benutzerdefinierten IEnumerable-Typbibliotheksattributs, um die Vererbung von IEnumerable an IMyClass zu erzwingen:

[
   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;
};

Die sich nach dem Importieren der Typbibliothek ergebende MSIL (Microsoft Intermediate Language) würde ungefähr wie folgt aussehen:

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

Wenn Sie beim Überprüfen der MSIL festgestellt haben, dass IEnumerable im Code nicht implementiert wird, können Sie grundsätzlich das custom-Attribut verwenden, um die Implementierung zu erzwingen.

Siehe auch

Konzepte

Anwenden des custom-Attributs zum Überschreiben des standardmäßigen COM-Dispatchbezeichners (DISPID)

Anwenden des custom-Attributs zum Markieren von Get-/Set-Eigenschaften für nicht verwaltetes COM

Importieren einer Typbibliothek als Assembly

Referenz

TypeLibConverter

ITypeLibConverter

Type Library Importer-Tool (Tlbimp.exe)