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 |
---|---|
Représente une construction d'espace de noms dans un fichier source. |
|
Représente une structure dans le code source. |
|
Représente une interface dans le code source. |
|
Représente une classe dans le code source. |
|
Représente une énumération dans le code source. |
|
Définit une construction de variable dans un fichier source. |
|
Représente un délégué dans le code source. |
|
Représente un élément ou une construction de code dans un fichier source. |
|
Modèle un élément d'événement de code. |
|
Définit une construction de propriété dans un fichier source. |
|
Définit un attribut pour un élément de code. |
|
Modèle l'utilisation des instructions qui importent des espaces de noms. |
|
Représente une construction de fonction dans un fichier source. |
|
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 |
|
CodeNamespace |
|
CodeProperty |
É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)