Partager via


Vue d'ensemble de l'objet CodeModel pour les applications Visual Basic et C#

Vous pouvez être amené à examiner par programmation la structure de votre code dans une application Visual Basic ou Visual C#. Vous pouvez, par exemple, souhaiter connaître les espaces de noms définis dans votre application, ainsi que leurs relations d'imbrication. Vous pouvez également souhaiter créer, en tant que base documentaire, un document qui répertorie les classes et leurs membres publics.

L'objet CodeModel2 constitue un objet d'extensibilité générale qui donne accès au code d'une application. L'objet CodeModel2 ne fournit aucune liste textuelle du code. Au lieu de cela, il fournit une collection imbriquée des objets qui représentent des éléments de code. Par exemple, chaque espace de noms présent dans le code est représenté par un objet CodeNamespace. L'objet CodeModel2 associé à un projet est accessible par la propriété CodeModel.

L'objet FileCodeModel2 constitue un objet d'extensibilité générale qui donne accès au code présent dans un fichier source unique. Chaque fichier source d'une application est représenté par un objet ProjectItem ; l'objet FileCodeModel2 associé à un élément de projet se trouve dans la propriété FileCodeModel.

Les objets CodeModel2 et FileCodeModel2 fournissent respectivement une propriété CodeModel2.CodeElements et FileCodeModel.CodeElements, c'est-à-dire une collection d'objets CodeElement2. Visual Basic et Visual C# prennent en charge les objets CodeModel2 et FileCodeModel de manière légèrement différente. Pour obtenir un exemple d'implémentation Visual Basic, consultez Découverte de code à l'aide du modèle de code (Visual Basic) et Comment : utiliser l'objet CodeModel pour analyser du code Visual Basic. Pour obtenir un exemple d'implémentation Visual C#, consultez Découverte de code à l'aide du modèle de code (Visual C#) et Comment : créer une classe C# à l'aide de l'objet CodeModel.

Certains langages n'implémentent pas l'intégralité du modèle de code de Visual Studio. Des rubriques d'aide signalent les éventuelles exceptions. La plupart des différences entre les diverses implémentations du modèle de code sont dues à des différences fonctionnelles entre les langages. Par exemple, vous ne pouvez pas ajouter de fonctions aux objets CodeNamespace de Visual Basic ou Visual C# car seul Visual C++ dispose de définitions de fonctions de niveau supérieur.

Les objets de modèle de code principaux sont répertoriés dans le tableau suivant : Cliquez sur les liens pour consulter la liste des méthodes et des propriétés de chaque objet.

Type

Description

CodeNamespace

Représente une construction d'espace de noms dans un fichier source.

CodeStruct2

Représente une structure dans le code source.

CodeInterface2

Représente une interface dans le code source.

CodeClass2

Représente une classe dans le code source.

CodeEnum

Représente une énumération dans le code source.

CodeVariable2

Définit une construction de variable dans un fichier source.

CodeDelegate2

Représente un délégué dans le code source.

CodeElement2

Représente un élément ou une construction de code dans un fichier source.

CodeEvent

Modèle un élément d'événement de code.

CodeProperty2

Définit une construction de propriété dans un fichier source.

CodeAttribute2

Définit un attribut pour un élément de code.

CodeImport

Modèle l'utilisation des instructions qui importent des espaces de noms.

CodeFunction2

Représente une construction de fonction dans un fichier source.

CodeParameter2

Définit un paramètre pour une fonction, une propriété, etc.

Éléments de code imbriqués

Les éléments de code d'une application sont organisés dans une architecture imbriquée. Par exemple, le FileCodeModel2 d'un élément de projet peut contenir, dans sa collection CodeElements, un élément de code pour un espace de noms. L'objet CodeNamespace qui représente cet espace de noms peut contenir plusieurs autres éléments de code qui représentent des classes dans sa propriété Members. Chaque élément CodeClass2 peut également contenir des éléments de code représentant des propriétés (objet CodeProperty2) et des méthodes (objet CodeFunction2). Les méthodes de récupération des éléments de code imbriqués dépendent du type d'élément de code et sont décrites dans la section suivante.

Catégories d'éléments de code

La classe CodeElement2 est une classe de base représentant tous les éléments de code d'un élément de projet (fichier source). De nombreuses classes dérivent de CodeElement2 pour représenter les constructions d'une application, notamment les espaces de noms, les classes, les propriétés, les méthodes et les événements. Il existe deux catégories exhaustives d'éléments de code : ceux qui représentent les types et ceux qui ne les représentent pas.

Certains éléments de code d'une application représentent les types. Ces éléments de code dérivent de l'objet CodeType et de l'objet CodeElement2 :

Vous pouvez déterminer si une référence à un objet CodeElement2 constitue l'un de ces types en utilisant la propriété IsCodeType. Pour rechercher les éléments de code imbriqués de ces types, utilisez la propriété Members, qui renvoie une collection CodeElements. Comment : utiliser l'objet CodeModel pour analyser du code Visual Basic inclut un exemple qui permet de rechercher toutes les classes dans un projet.

La procédure de recherche des éléments de code imbriqués dans les autres types d'éléments de code dépend du type de l'élément de code imbriqué. Par exemple, sachant qu'une propriété n'a qu'une méthode Get et une méthode Set, l'objet CodeProperty2 associé à une propriété possède les propriétés Getter et Setter qui retournent les éléments CodeFunction2. La liste suivante montre quelles propriétés utiliser pour trouver les éléments de code imbriqués des types d'éléments de code.

Type

Propriété

CodeFunction

Parameters

CodeNamespace

Members

CodeProperty

Getter et Setter

Éléments de code des références externes

Votre code peut contenir les déclarations de type correspondant à des types définis dans les références de projet. (Les références de projet sont ajoutées par l'intermédiaire de la boîte de dialogue Ajouter une référence ou avec la méthode d'extensibilité References.Add). Le système de projet Visual Basic ne résout pas les objets CodeTypeRef2 représentant ces références au-delà de leurs noms. Par conséquent, si vous essayez d'utiliser une propriété ou une méthode de l'objet CodeElement2 associé à la référence, autre que la propriété Name, une exception « Non implémenté » est levée. Ces références sont appelées éléments de code « nom de type uniquement ». La propriété InfoLocation des objets CodeType qui représentent des références externes a la valeur vsCMInfoLocationNone.

Erreurs de compilateur et objet CodeModel

Lorsque vous rédigez un code qui comporte des références à des objets CodeElement2, sachez que le code source sous-jacent référencé peut changer. L'élément de code element peut être supprimé, renommé ou impliqué dans une erreur de compilation. Alors, tous les appels à l'objet CodeElement2 retournent le message d'erreur « Exception à partir de HRESULT : 0x80047E2C ».

Voir aussi

Tâches

Comment : utiliser l'objet CodeModel pour analyser du code Visual Basic

Dépannage de l'extensibilité Visual Basic et Visual C#

Concepts

Découverte de code à l'aide du modèle de code (Visual Basic)

Découverte de code à l'aide du modèle de code (Visual C#)