Property o variabili pubbliche ?

mercoledì 19 settembre 2007 - 17.32

ravalon Profilo | Expert

Sto creando una semplice classe che mi serve per abilitare una connessione ad un db MySQL....dispone di pochi semplici campi ed un metodo...

Ho impostato i campi che mi serve controllare come PROPERTY....funziona tutto...imposto e leggo questi campi dove voglio....

...ma noto che anche dichiarando una semplice variabile pubblica ottengo lo stesso risultato, con il vantaggio che la variabile non me la va a caricare ogni volta come invece accade nelle property, dove mi fa il giro per leggere nuovamente il valore...

Domanda forse stupida....che differenza passa tra variabili e property ? quale è la loro utilità ? quale è consigliabile utilizzare nel caso che fossero grossomodo sovrapponibili ?

E' forse che le property dovrebbero servire per l'accesso da classi esterne mentre i campi servono internamente ?

alx_81 Profilo | Guru

>Ho impostato i campi che mi serve controllare come PROPERTY....funziona
>tutto...imposto e leggo questi campi dove voglio....>
>...ma noto che anche dichiarando una semplice variabile pubblica
>ottengo lo stesso risultato, con il vantaggio che la variabile
>non me la va a caricare ogni volta come invece accade nelle property,
>dove mi fa il giro per leggere nuovamente il valore...
>
>Domanda forse stupida....che differenza passa tra variabili e property?
Le variabili, o campi della classe sono informazioni che immagazzinano il valore della caratteristica della classe.
Le proprietà sono un involucro che permette un maggiore livello di sicurezza e di gestione per l'accesso all'informazione salvata nella variabile.

>quale è la loro utilità?
Proprio perchè sono come involucri ti permettono di creare logiche di gestione dell'errore, di configurare il livello di accesso (privati, pubblici, in sola lettura, in sola scrittura o entrambi get/set). Quindi ti "tengono distante" dal campo, che è buona norma rimanga privato ed interamente gestito dalla classe.

>quale è consigliabile utilizzare nel caso che fossero grossomodo sovrapponibili?
Direi le property, sempre per il maggior livello di gestione degli accessi (pensa anche all'ereditarietà, al fatto che a volte puoi solo leggere una info ma non scriverla e viceversa..)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

ti ringrazio delle delucidazioni...quindi più che altro è per un fatto di accessibilità e sicurezza...

..ma come prestazioni sono più onerose ? tramite debug vedo che ogni volta che si usa una property va a rileggersela come se ad ogni ciclo di lettura poi se la scordasse....o succede perchè nel frattempo potrebbe essere cambiata ?

alx_81 Profilo | Guru

>..ma come prestazioni sono più onerose ? tramite debug vedo che
>ogni volta che si usa una property va a rileggersela come se
>ad ogni ciclo di lettura poi se la scordasse....o succede perchè
>nel frattempo potrebbe essere cambiata ?
quello che vedi tramite debug è da considerare fino ad un certo punto in questo caso..
non mi soffermerei sulle prestazioni che una property può avere..
non mi porrei nemmeno il problema..
E' buona norma usarle sempre a mio avviso.. tant'è che anche gli oggetti del framework le usano, ma non usano campi (a meno che non siano costanti)..


Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

infatti il tuo suggerimento è lo stesso che ho riportato nel mio libro su ASP.NET 2.0....ti ringrazio

Wamba Profilo | Expert

alex, scusa se intervengo. Vorrei solo aggiungere quello che ho sentito, per averne anch'io conferma. Purtroppo non mi ricordo se la voce è ufficiale Micorsoft o è di quanlche guru tipo Dino Esposito.

Se dichiariamo una semplice property:

public int Pippo
{
get
{
return _pippo;
}
set
{
_pippo = value;
}
}

private int _pippo = 0;

il compilatore è ottimizzato per ottenere lo stesso risultato di un semplice attributo, avendo quindi tutti i vantaggi di sviluppo della property e la velocità dell'attributo.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

alx_81 Profilo | Guru

>alex, scusa se intervengo. Vorrei solo aggiungere quello che
>ho sentito, per averne anch'io conferma. Purtroppo non mi ricordo
>se la voce è ufficiale Micorsoft o è di quanlche guru tipo Dino
>Esposito.
>
>Se dichiariamo una semplice property:
>
>public int Pippo
>{
> get
> {
> return _pippo;
> }
> set
> {
> _pippo = value;
> }
>}
>
>private int _pippo = 0;
>
>il compilatore è ottimizzato per ottenere lo stesso risultato
>di un semplice attributo, avendo quindi tutti i vantaggi di sviluppo
>della property e la velocità dell'attributo.
quoto, ragion per cui non mi preoccuperei delle prestazioni ..
comunque, di solito preferisco farmi anche la gestione dell'errore nella property e usare sempre quella, in modo che il check è demandato nella property.. giusto per leggibilità..
>-----------------------------------------------------------
>Solo chi ha il Caos dentro può generare una stella danzante
>Wamba

Alx81 =)

http://blogs.dotnethell.it/suxstellino

Wamba Profilo | Expert

e per la centralizzazione, che non fa mai male .
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
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