Fastidio in fase di debug :D

domenica 24 maggio 2009 - 15.08

JanickGers Profilo | Newbie

Salve a tutti,
premetto che sono un assoluto neofita della programmazione, quindi se sparo cavolate non mi offendete
Allora, ho un 'non problema', nel senso è una cosa che mi infastidisce... in fase di debug, quando si sposta il cursore su una classe inizializzata, il buon Visual Studio (2008 nel mio caso) ci fa vedere le proprietà... ma anche le variabili... questa cosa non accade per una classe già presente nel framework, mentre succede sempre per una classe creata dall'utente.


818x152 17Kb


Lo si vede chiaramente in questa immagine... non c'è un modo per non far mostrare le variabili in fase di debug?
Vi ringrazio in anticipo

Jeremy Profilo | Guru

Ciao Andrea.
Sei sicuro di ciò che dici??
Forse non ho capito il problema ma, nella finestra espressioni di controllo, puoi scrivere il nome di qualsiasi variabile di ogni tipo(nativo e non) per vederne struttura e valori di tutte le proprietà di cui è composta.
Cosa esattamente non ti riesce di fare?
Prova a fare un esempio pratico.

Facci sapere...
Ciao

JanickGers Profilo | Newbie

Ciao Tiziano,
grazie per la rapida risposta.
Non ho capito bene quale sia la finestra espressioni di controllo, è forse la watch list?
Comunque, per quello che so io, ogni proprietà di una classe è appoggiata a una variabile della classe stessa. Per esempio, per una textbox la proprietà Text sarà sicuramente salvata in una variabile string. Se in fase di debug, ovvero con in puntatore giallo su un'istruzione per capirsi, se sposto il mouse su una this.label1 ad esempio, si apre un la classica finestrina popup che mi fa esplorare i vari valori delle varie proprietà, ma non le variabili a cui queste si appoggiano; se invece faccio questo su una classe da me creata come la MD5FileHashset che si vede nell'immagine, si vedono tutte le variabili a cui si appoggia le proprietà.
Infatti Chunk (Proprietà) si appoggia a chunk (che è una Dictionary<string,string>), e via via le altre... quello che chiedevo è se fosse possibile in qualche modo nascondere le variabili (chunk in questo caso), ma se dovete perderci tempo non importa, è solo uno sfizio mio
Sarebbe invece fastidioso se la classe avesse un gran numero di proprietà.

Grazie mille.

Jeremy Profilo | Guru

Ciao Andrea.
Penso di aver capito ciò che lamenti.
Il problema stà nella visibilità delle tue variabili di *appoggio*, nel senso, se una proprietà viene dichiarata Public, questa verrà valutata come campo e pertanto accessibile dall'esterno.
Se invece, le variabili di appoggio, ti servissero se per lo scopo specifico di appoggio di una proprietà, devi dichiarle Private.

Esempio:
Private _Proprieta1 as string Public Property Proprieta1 as string Get Return _Proprieta1 End Get Set(Byval value as string) _Proprieta1=value End Set End Property

Facci sapere...
Ciao

aiedail92 Profilo | Expert

No Jeremy, mi sa che non hai capito bene. Quello che non vuole lui è che gli vengano mostrati i membri privati in debug, come invece appaiono nello screenshot che ha postato.

Andrea, per risolvere devi assegnare alla variabile l'attributo DebuggerBrowsableAttribute (dal namespace System.Diagnostics), in questo modo:

using System.Diagnostics; // etc... class TuaClasse { [DebuggerBrowsable(DebuggerBrowsableState.Never)] private string variabile; }

A questo punto la variabile non è più visibile in debug dall'elenco dei membri della classe, ma puoi comunque visualizzarla richiedendola esplicitamente.

Luca

Jeremy Profilo | Guru

Ciao Luca.
Già...mi sa che ho preso un abbaglio....anche nel caso che avevo presupposto io non avrebbe risolto con la soluzione che ho indicato.

Grazie dell'intervento.
Ciao.

JanickGers Profilo | Newbie

Ciao Luca,
grazie mille è proprio quello che intendevo
Un grazie a tutti quanti però, disponibilissimi.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5