Anwenden des custom-Attributs zum Implementieren von IEnumerable
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
Referenz
Tlbimp.exe (Type Library Importer-Tool)
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