Partager via


Indiquez au débogueur quel type afficher à l’aide de l’attribut DebuggerTypeProxy (C#, Visual Basic, C++/CLI)

DebuggerTypeProxyAttribute spécifie un proxy ou un serveur autonome pour un type et modifie la façon dont le type est affiché dans les fenêtres du débogueur. Lorsque vous affichez une variable qui a un proxy, le proxy correspond au type d’origine dans l’affichage. La fenêtre de variable de débogueur affiche uniquement les membres publics du type de proxy. Les membres privés ne sont pas affichés.

Cet attribut peut être appliqué à :

  • Structures
  • Cours
  • Assemblys

Note

Pour le code natif, cet attribut est pris en charge uniquement dans le code C++/CLI.

Une classe proxy de type doit avoir un constructeur qui accepte un argument du type pour que le proxy soit remplacé. Le débogueur crée une nouvelle instance de la classe de proxy de type chaque fois qu’il doit afficher une variable du type visé. Cela peut avoir des implications sur les performances. Par conséquent, évitez tout travail inutile dans le constructeur.

Pour réduire les pénalités de performance, l’évaluateur d’expression n’examine pas les attributs du proxy d'affichage du type, à moins que le type ne soit développé par l’utilisateur en cliquant sur le symbole + dans la fenêtre du débogueur ou via l’utilisation de DebuggerBrowsableAttribute. Par conséquent, ne placez pas d’attributs sur le type d’affichage lui-même. Les attributs peuvent et doivent être utilisés dans le corps du type d’affichage.

Il est judicieux que le proxy de type soit une classe imbriquée privée dans la classe cible par l’attribut. Cela lui permet d’accéder facilement aux membres internes.

DebuggerTypeProxyAttribute peut être hérité. Par conséquent, si un proxy de type est spécifié sur une classe de base, il s’applique à toutes les classes dérivées, sauf si ces classes dérivées spécifient leur propre proxy de type.

Si DebuggerTypeProxyAttribute est utilisé au niveau de l'assembly, le paramètre Target spécifie le type du proxy à remplacer.

Pour obtenir un exemple d’utilisation de cet attribut et DebuggerDisplayAttributeDebuggerTypeProxyAttribute, consultez Utilisation de l’attribut DebuggerDisplay.

Important

Si vous sélectionnez l’option Afficher la structure brute des objets dans les fenêtres variables , l’attribut DebuggerDisplay est ignoré. Ce paramètre se trouve dans le volet Outils>Options de la section Tous les paramètres>Débogage>Général.

Important

Si vous sélectionnez l’option Afficher la structure brute des objets dans les fenêtres variables , l’attribut DebuggerDisplay est ignoré. Ce paramètre se trouve dans la boîte de dialogueOptions> de la section Débogage>général.

Utilisation de génériques avec DebuggerTypeProxy

La prise en charge des génériques est limitée. Pour C#, DebuggerTypeProxy prend uniquement en charge les types ouverts. Un type ouvert, également appelé type nonconstructé, est un type générique qui n’est pas instancié avec des arguments pour ses paramètres de type. Les types fermés, également appelés types construits, ne sont pas pris en charge.

La syntaxe d’un type ouvert ressemble à ceci :

Namespace.TypeName<,>

Si vous utilisez un type générique comme cible dans DebuggerTypeProxy, vous devez utiliser cette syntaxe. Le DebuggerTypeProxy mécanisme déduit pour vous les paramètres de type.

Pour plus d’informations sur les types ouverts et fermés en C#, consultez la spécification du langage C#, section 20.5.2 Types ouverts et fermés.

Visual Basic n’a pas de syntaxe de type ouvert. Vous ne pouvez donc pas faire la même chose dans Visual Basic. Au lieu de cela, vous devez utiliser une représentation sous forme de chaîne du nom de type ouvert.

"Namespace.TypeName'2"