Freigeben über


Übersicht über das CodeModel-Objekt für Visual Basic- und C#-Anwendungen

Aktualisiert: November 2007

Möglicherweise muss die Struktur des Codes in einer Visual Basic-, Visual C#- oder Visual J#-Anwendung programmgesteuert untersucht werden. Vielleicht möchten Sie die in der Anwendung definierten Namespaces und ihre geschachtelten Beziehungen in Erfahrung bringen oder für den Dokumentationsprozess ein Dokument erstellen, in dem die Klassen und ihre öffentlichen Member aufgeführt sind.

Das CodeModel2-Objekt ist ein Objekt mit allgemeiner Erweiterbarkeit, das Zugriff auf den Anwendungscode bietet. Das CodeModel2-Objekt enthält keinen Code in Form einer Textliste, sondern vielmehr eine geschachtelte Auflistung von Objekten, die die Codeelemente darstellen. Jeder Namespace im Code wird beispielsweise durch ein CodeNamespace-Objekt dargestellt. Der Zugriff auf das mit einem Projekt verknüpfte CodeModel2-Objekt erfolgt über die CodeModel-Eigenschaft.

Das FileCodeModel2-Objekt ist ein Objekt mit allgemeiner Erweiterbarkeit, das Zugriff auf Code in einer einzelnen Quelldatei bietet. Jede in einer Anwendung enthaltene Quelldatei wird durch ein ProjectItem-Objekt dargestellt; das mit einem Projektelement verknüpfte FileCodeModel2-Objekt befindet sich in der FileCodeModel-Eigenschaft.

Sowohl das CodeModel2-Objekt als auch das FileCodeModel2-Objekt stellen eine CodeModel2.CodeElements-Eigenschaft bzw. eine FileCodeModel.CodeElements-Eigenschaft bereit, die einer Auflistung von CodeElement2-Objekten entsprechen. Visual Basic, Visual C# und Visual J# unterstützen das CodeModel2-Objekt und das FileCodeModel-Objekt auf etwas unterschiedliche Weise. Ein Beispiel einer Visual Basic-Implementierung finden Sie unter Ermitteln von Code über das Codemodell (Visual Basic) und Gewusst wie: Verwenden des CodeModel-Objekts zum Analysieren von Visual Basic-Code. Ein Beispiel einer Visual C#-Implementierung finden Sie unter Ermitteln von Code über das Codemodell (Visual C#) und Gewusst wie: Erstellen einer C#-Klasse mithilfe des CodeModel-Objekts.

Einige Sprachen implementieren nicht das vollständige Visual Studio-Codemodell. Hilfethemen weisen ggf. auf Ausnahmen hin. Die meisten Unterschiede zwischen den Codemodellimplementierungen sind auf funktionale Besonderheiten der einzelnen Sprachen zurückzuführen. So ist es beispielsweise nicht möglich, CodeNamespace-Objekten in Visual Basic, Visual C# oder Visual J# Funktionen hinzuzufügen, da nur Visual C++ über Funktionsdefinitionen höchster Ebene verfügt.

Die Objekte des Hauptcodemodells werden in der folgenden Tabelle aufgelistet. Klicken Sie auf die Links, um die Methoden und Eigenschaften der einzelnen Objekte anzuzeigen.

Typ

Beschreibung

CodeNamespace

Stellt ein Namespacekonstrukt in einer Quelldatei dar.

CodeStruct2

Stellt eine Struktur im Quellcode dar.

CodeInterface2

Stellt eine Schnittstelle im Quellcode dar.

CodeClass2

Stellt eine Klasse im Quellcode dar.

CodeEnum

Stellt eine Enumeration im Quellcode dar.

CodeVariable2

Definiert ein Variablenkonstrukt in einer Quelldatei.

CodeDelegate2

Stellt einen Delegat im Quellcode dar.

CodeElement2

Stellt ein Codeelement oder -konstrukt in einer Quelldatei dar.

CodeEvent

Modelliert ein Codeereigniselement.

CodeProperty2

Definiert ein Eigenschaftskonstrukt in einer Quelldatei.

CodeAttribute2

Definiert ein Attribut für ein Codeelement.

CodeImport

Modelliert die Verwendung von Anweisungen, die Namespaces importieren.

CodeFunction2

Stellt ein Funktionskonstrukt in einer Quelldatei dar.

CodeParameter2

Definiert einen Parameter für eine Funktion, Eigenschaft usw.

Geschachtelte Codeelemente

Die in einer Anwendung enthaltenen Codeelemente sind in einer geschachtelten Architektur organisiert. Das FileCodeModel2 eines Projektelements kann in seiner CodeElements-Auflistung beispielsweise ein Codeelement für einen Namespace enthalten. Das CodeNamespace-Objekt, das diesen Namespace darstellt, kann etliche andere Codeelemente enthalten, die Klassen in der zugehörigen Members-Eigenschaft darstellen. Jedes CodeClass2-Element kann dagegen Codeelemente enthalten, die Eigenschaften (CodeProperty2-Objekt) und Methoden (CodeFunction2-Objekt) darstellen. Welche Methoden zum Abrufen geschachtelter Codeelemente verwendet werden, hängt vom Codeelementtyp ab. Die einzelnen Methoden werden im nächsten Abschnitt beschrieben.

Codeelementkategorien

Die CodeElement2-Klasse ist eine Basisklasse, die alle Codeelemente in einem Projektelement (Quelldatei) darstellt. Viele Klassen werden zur Darstellung der Konstrukte in einer Anwendung, darunter Namespaces, Klassen, Eigenschaften, Methoden und Ereignisse, von CodeElement2 abgeleitet. Es gibt zwei umfassende Kategorien von Codeelementen – solche, die Typen darstellen, und solche, die keine Typen darstellen.

Einige Codeelemente in einer Anwendung stellen Typen dar. Diese Codeelemente werden vom CodeType-Objekt sowie vom CodeElement2-Objekt abgeleitet:

Sie können mithilfe der IsCodeType-Eigenschaft festlegen, ob ein Verweis auf ein CodeElement2-Objekt des einen oder anderen Typs ist. Verwenden Sie zum Suchen nach den geschachtelten Codeelementen dieser Typen die Members-Eigenschaft, die eine CodeElements-Auflistung zurückgibt. Gewusst wie: Verwenden des CodeModel-Objekts zum Analysieren von Visual Basic-Code enthält ein Beispiel, in dem nach allen Klassen eines Projekts gesucht wird.

Wie Sie Codeelemente suchen, die unter anderen Codeelementtypen geschachtelt sind, hängt vom Typ des geschachtelten Codeelements ab. Wenn eine Eigenschaft z. B. nur über eine Get-Methode und eine Set-Methode verfügt, enthält das mit einer Eigenschaft verknüpfte CodeProperty2-Objekt die Getter-Eigenschaft und die Setter-Eigenschaft, über die CodeFunction2-Elemente zurückgegeben werden. Der folgenden Liste können Sie entnehmen, mit welchen Eigenschaften Sie geschachtelte Codeelemente suchen können, die die betreffenden Codeelementtypen aufweisen.

Typ

Eigenschaft

CodeFunction

Parameters

CodeNamespace

Members

CodeProperty

Getter und Setter

Codeelemente aus externen Verweisen

Möglicherweise enthält Ihr Code Typdeklarationen von Typen, die in Projektverweisen definiert wurden. (Projektverweise werden über das Dialogfeld Verweis hinzufügen oder mit der References.Add-Erweiterbarkeitsmethode hinzugefügt.) Das Visual Basic-Projektsystem löst keine CodeTypeRef2-Objekte mit anderen Eigenschaften als der Name-Eigenschaft auf. Wenn Sie also versuchen, andere Eigenschaften oder Methoden des mit dem Verweis verknüpften CodeElement2-Objekts zu verwenden, die keine Name-Eigenschaft darstellen, wird eine Ausnahme mit dem Fehler "Nicht implementiert" ausgelöst. Auf diese Verweise wird als Codeelemente "nur mit Typnamen" verwiesen. Bei CodeType-Objekten, die externe Verweise darstellen, ist die InfoLocation-Eigenschaft auf vsCMInfoLocationNone festgelegt.

Compilerfehler und das CodeModel-Objekt

Wenn Sie Code schreiben, der Verweise auf CodeElement2-Objekte enthält, müssen Sie beachten, dass sich der zugrunde liegende Quellcode ändern kann, während der Verweis enthalten ist. Das Codeelement kann gelöscht, umbenannt oder in einen Compilerfehler verwickelt werden. In diesem Fall gibt jeder Aufruf eines CodeElement2-Objekts die Fehlermeldung "Ausnahme von HRESULT: 0x80047E2C" zurück.

Siehe auch

Aufgaben

Gewusst wie: Verwenden des CodeModel-Objekts zum Analysieren von Visual Basic-Code

Problembehandlung hinsichtlich der Erweiterbarkeit von Visual Basic und Visual C#

Konzepte

Ermitteln von Code über das Codemodell (Visual Basic)

Ermitteln von Code über das Codemodell (Visual C#)