Partager via


Utilisation de l'attribut DebuggerTypeProxy

DebuggerTypeProxyAttribute spécifie un proxy (ou remplaçant) pour un type et modifie la façon dont le type est affiché dans les fenêtres du débogueur.Lorsque vous visualisez une variable possédant un proxy, ce dernier remplace le type d'origine dans l'affichage.La fenêtre de variables du débogueur n'affiche que les membres publics du type du proxy.Les membres privés ne sont pas affichés.

Cet attribut peut s'appliquer aux éléments suivants :

  • Structures

  • Classes

  • Assemblys

Une classe proxy de type doit avoir un constructeur pouvant prendre un argument du type que le proxy remplacera.Le débogueur crée une nouvelle instance de la classe proxy de type chaque fois qu'il doit afficher une variable du type cible.Cela peut avoir des conséquences sur les performances.Par conséquent, vous ne devez pas effectuer d'autres tâches dans le constructeur que celles qui sont absolument nécessaires.

Pour éviter de trop handicaper les performances, l'évaluateur d'expression n'examine pas les attributs sur le 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 de débogage, ou par l'utilisation de DebuggerBrowsableAttribute.Vous ne devez donc pas placer 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 sera judicieux de faire du proxy de type une classe privée imbriquée dans la classe ciblée par l'attribut.Cela lui permettra d'accéder facilement aux membres internes.

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

Pour obtenir un exemple de la façon d'utiliser cet attribut avec DebuggerDisplayAttribute et DebuggerTypeProxyAttribute, consultez Utilisation de l'attribut DebuggerDisplay.

Utilisation de génériques avec DebuggerTypeProxy

La prise en charge des génériques est limitée.Pour C#, DebuggerTypeProxy prend en charge uniquement les types ouverts.Un type ouvert, également appelé type non construit, est un type générique qui n'a pas été 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 pour un type ouvert a l'aspect suivant :

Namespace.TypeName<,>

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

Pour plus d'informations sur les types ouverts et fermés en C#, consultez Spécification du langage C#, section 20.5.2 Open and closed types.

Visual Basic n'ayant pas de syntaxe de type ouvert, vous ne pouvez pas faire la même chose en Visual Basic.À la place, vous devez utiliser une représentation sous forme de chaîne du nom de type ouvert.

"Namespace.TypeName'2"

Voir aussi

Référence

Utilisation de l'attribut DebuggerDisplay

Concepts

Affichage des types de données personnalisés

Amélioration du débogage avec les attributs d'affichage de débogueur