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 il modo in cui il tipo viene visualizzato nelle finestre del debugger. Quando viene visualizzata una variabile che dispone di proxy, questo sostituisce il tipo originale nella visualizzazione. Nella finestra delle variabili del debugger vengono visualizzati soltanto i membri pubblici del tipo proxy. I membri privati non vengono visualizzati.

Questo attributo può essere applicato a:

  • Strutture
  • Classi
  • Assembly

Nota

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

Una classe proxy del tipo deve disporre di un costruttore che accetta un argomento del tipo sostituito dal proxy. Il debugger crea una nuova istanza della classe proxy del tipo ogni volta che è necessario visualizzare una variabile del tipo di destinazione. Ciò può incidere sulle prestazioni. Di conseguenza, è opportuno eseguire solo gli interventi strettamente necessari nel costruttore.

Per ridurre gli effetti negativi sulle prestazioni, l'analizzatore di espressioni non esamina gli attributi nel proxy visualizzato per il tipo a meno che il tipo non venga espanso dall'utente facendo clic sul simbolo + nella finestra del debugger o tramite DebuggerBrowsableAttribute. È pertanto sconsigliabile inserire attributi nel tipo visualizzato. È possibile e consigliabile utilizzare gli attributi nel corpo del tipo visualizzato.

È opportuno che il proxy del tipo sia una classe annidata privata all'interno della classe di destinazione dell'attributo. In questo modo l'attributo può accedere facilmente ai membri interni.

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

Se DebuggerTypeProxyAttribute viene utilizzato a livello di assembly, il parametro Target specifica il tipo che verrà sostituito dal proxy.

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

Importante

Se la casella di controllo Mostra struttura non elaborata di oggetti nelle finestre variabili è selezionata nella finestra di dialogo Strumenti/Opzioni/Debug , l'attributo DebuggerDisplay viene ignorato.

Utilizzo di generics con DebuggerTypeProxy

Il supporto per generics è limitato. In C# DebuggerTypeProxy supporta solo tipi aperti. Un tipo aperto, noto anche come tipo non costruito, è un tipo generico per il quale non è stata creata un'istanza con argomenti relativi ai parametri di tipo. I tipi chiusi, noti anche come tipi costruiti, non sono supportati.

La sintassi per un tipo aperto è simile alla seguente:

Namespace.TypeName<,>

Se si utilizza un tipo generico come destinazione in DebuggerTypeProxy, è necessario adottare questa sintassi. Il meccanismo di DebuggerTypeProxy deduce automaticamente i parametri di tipo.

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

In Visual Basic non è disponibile la sintassi dei tipi aperti, pertanto non è possibile eseguire la stessa operazione in questo linguaggio, ma è necessario utilizzare una rappresentazione del nome del tipo aperto in formato stringa.

"Namespace.TypeName'2"