Condividi tramite


Indicare al debugger il tipo da visualizzare usando l'attributo DebuggerTypeProxy (C#, Visual Basic, C++/CLI)

DebuggerTypeProxyAttribute specifica un proxy, o stand-in, per un tipo e modifica la modalità di visualizzazione del tipo nelle finestre del debugger. Quando si visualizza una variabile con un proxy, il proxy sostituisce il tipo originale nella visualizzazione. La finestra della variabile del debugger visualizza solo i membri pubblici del tipo proxy. I membri privati non vengono visualizzati.

Questo attributo può essere applicato a:

  • Strutture
  • Classi
  • Assemblaggi

Annotazioni

Per il codice nativo, questo attributo è supportato solo nel codice C++/CLI.

Una classe proxy di tipo deve avere un costruttore che accetta un argomento del tipo che il proxy intende sostituire. Il debugger crea una nuova istanza della classe proxy di tipo ogni volta che deve visualizzare una variabile del tipo di destinazione. Ciò può avere implicazioni sulle prestazioni. Di conseguenza, evitare qualsiasi lavoro non necessario nel costruttore.

Per ridurre al minimo le penalità di prestazione, un valutatore di espressioni non esamina gli attributi nel proxy di visualizzazione del tipo a meno che il tipo non venga espanso dall'utente facendo clic sul simbolo + nella finestra del debugger o utilizzando DebuggerBrowsableAttribute. Pertanto, non posizionare attributi sul tipo di visualizzazione stesso. Gli attributi possono e devono essere usati nel corpo del tipo di visualizzazione.

È consigliabile che il proxy di tipo sia una classe annidata privata all'interno della classe di destinazione dell'attributo. In questo modo è possibile accedere facilmente ai membri interni.

DebuggerTypeProxyAttribute può essere ereditato, quindi se viene specificato un proxy di tipo in una classe di base, si applica a qualsiasi classe derivata, a meno che tali classi derivate non specifichino il proprio proxy di tipo.

Se DebuggerTypeProxyAttribute viene usato a livello di assembly, il Target parametro specifica il tipo per il proxy da sostituire.

Per un esempio di come usare questo attributo insieme DebuggerDisplayAttribute a e DebuggerTypeProxyAttribute, vedere Uso dell'attributo DebuggerDisplay.

Importante

Se si seleziona l'opzione Mostra struttura non elaborata di oggetti nelle finestre variabili , l'attributo DebuggerDisplay viene ignorato. Questa impostazione si trova nel riquadro Opzioni strumenti> della sezione Tutte le impostazioni>>.

Importante

Se si seleziona l'opzione Mostra struttura non elaborata di oggetti nelle finestre variabili , l'attributo DebuggerDisplay viene ignorato. Questa impostazione si trova nella finestra di dialogo Opzioni strumenti> della sezione Debug>.

Uso di generics con DebuggerTypeProxy

Il supporto per i generics è limitato. Per C#, DebuggerTypeProxy supporta solo tipi aperti. Un tipo aperto, detto anche tipo non costruito, è un tipo generico di cui non è stata creata un'istanza con argomenti per i parametri di tipo. I tipi chiusi, detti anche tipi costruiti, non sono supportati.

La sintassi per un tipo aperto è simile alla seguente:

Namespace.TypeName<,>

Se si usa un tipo generico come destinazione in DebuggerTypeProxy, è necessario usare questa sintassi. Il DebuggerTypeProxy meccanismo deduce automaticamente i parametri di tipo per te.

Per altre informazioni sui tipi aperti e chiusi in C#, vedere specifica del linguaggio C#, sezione 20.5.2 Tipi aperti e chiusi.

Visual Basic non dispone della sintassi del tipo aperto, quindi non è possibile eseguire la stessa operazione in Visual Basic. È invece necessario usare una rappresentazione di stringa del nome del tipo aperto.

"Namespace.TypeName'2"