Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les arborescences de syntaxe représentent la structure lexicale et syntactique du code source. Bien que ces informations seules soient suffisantes pour décrire toutes les déclarations et la logique dans la source, il n’est pas suffisant d’informations pour identifier ce qui est référencé. Un nom peut représenter :
- Un type
- un champ
- une méthode
- Une variable locale
Bien que chacun d’entre eux soit uniquement différent, déterminer lequel un identificateur fait réellement référence nécessite souvent une compréhension approfondie des règles de langage.
Il existe des éléments de programme représentés dans le code source, et les programmes peuvent également faire référence à des bibliothèques compilées précédemment, empaquetées dans des fichiers d’assembly. Bien qu’aucun code source, et donc aucun nœud de syntaxe ou arborescence, ne soit disponible pour les assemblys, les programmes peuvent toujours faire référence à des éléments à l’intérieur de ces derniers.
Pour ces tâches, vous avez besoin du modèle sémantique.
En plus d’un modèle syntaxique du code source, un modèle sémantique encapsule les règles de langage, ce qui vous permet de faire correspondre correctement les identificateurs avec l’élément de programme approprié référencé.
Compilation
Une compilation est une représentation de tout ce qui est nécessaire pour compiler un programme C# ou Visual Basic, qui inclut toutes les références d’assembly, les options du compilateur et les fichiers sources.
Étant donné que toutes ces informations se trouvent à un seul endroit, les éléments contenus dans le code source peuvent être décrits plus en détail. La compilation représente chaque type, membre ou variable déclaré comme symbole. La compilation contient diverses méthodes qui vous aident à trouver et à lier les symboles qui ont été déclarés dans le code source ou importés en tant que métadonnées à partir d’un assembly.
Comme pour les arborescences de syntaxe, les compilations sont immuables. Après avoir créé une compilation, elle ne peut pas être modifiée par vous ou par toute autre personne avec laquelle vous pouvez le partager. Toutefois, vous pouvez créer une compilation à partir d’une compilation existante, en spécifiant une modification comme vous le faites. Par exemple, vous pouvez créer une compilation identique à une compilation existante, à l'exception du fait qu'elle peut inclure un fichier source ou une référence d’assemblage supplémentaire.
Symboles
Un symbole représente un élément distinct déclaré par le code source ou importé à partir d’un assembly en tant que métadonnées. Chaque espace de noms, type, méthode, propriété, champ, événement, paramètre ou variable locale est représenté par un symbole.
Une variété de méthodes et de propriétés sur le Compilation type vous aident à trouver des symboles. Par exemple, vous pouvez trouver un symbole pour un type déclaré par son nom de métadonnées commun. Vous pouvez également accéder à la table de symboles entière en tant qu’arborescence de symboles rootés par l’espace de noms global.
Les symboles contiennent également des informations supplémentaires que le compilateur détermine à partir de la source ou des métadonnées, telles que d’autres symboles référencés. Chaque type de symbole est représenté par une interface distincte dérivée de ISymbol, chacune avec ses propres méthodes et propriétés détaillant les informations collectées par le compilateur. La plupart de ces propriétés référencent directement d’autres symboles. Par exemple, la IMethodSymbol.ReturnType propriété vous indique le symbole de type réel retourné par la méthode.
Les symboles présentent une représentation commune des espaces de noms, des types et des membres, entre le code source et les métadonnées. Par exemple, une méthode déclarée dans le code source et une méthode importée à partir de métadonnées sont toutes deux représentées par les IMethodSymbol mêmes propriétés.
Les symboles sont similaires au concept du système de type CLR tel qu’il est représenté par l’API System.Reflection , mais ils sont plus riches en ce qu’ils modélisent plus que les types. Les espaces de noms, les variables locales et les étiquettes sont tous des symboles. En outre, les symboles sont une représentation des concepts du langage, et non des concepts CLR. Il y a beaucoup de chevauchements, mais il y a aussi de nombreuses distinctions significatives. Par exemple, une méthode d’itérateur en C# ou Visual Basic est un symbole unique. Toutefois, lorsque la méthode itérateur est traduite en métadonnées CLR, il s’agit d’un type et de plusieurs méthodes.
Modèle sémantique
Un modèle sémantique représente toutes les informations sémantiques d’un fichier source unique. Vous pouvez l’utiliser pour découvrir les éléments suivants :
- Symboles référencés à un emplacement spécifique dans la source.
- Type résultant d’une expression.
- Tous les diagnostics (erreurs et avertissements).
- Comment les variables circulent dans et hors des régions de la source.
- Réponses à des questions plus spéculatives.