2010-08-27 13 views
8

Se faccio un membro della classe privato, e poi voglio accedere a quel membro, dobbiamo definire una proprietà pubblica per quel membro. Ma poi mi chiedo: se possiamo usare pubblicamente il membro della classe dichiarandone una proprietà pubblica, allora perché non definiamo semplicemente il membro della classe come pubblico?Perché utilizzare le proprietà pubbliche per i campi privati ​​in C#?

+2

cosa stai chiedendo? Quella (singola frase) è indecifrabile. – tster

+0

L'ho modificato pesantemente. Penso che questo sia ciò che intendeva. – Timwi

+0

Penso che l'ultima frase "... come privato in primo luogo" dovrebbe essere cambiata in "... come pubblico all'inizio". –

risposta

2

Perché è possibile convalidare il valore specificato in una proprietà.

+0

Questo non è davvero un argomento perché se in seguito trovi la necessità di farlo, puoi * ancora * introdurre la proprietà allora. – Timwi

+0

@Timwi, penso che la modifica di un membro in una proprietà costringa il codice che utilizza il tipo all'interno di un dll per ricompilare. Anche se questo non è un problema per la maggior parte delle persone, se stai distribuendo i file .dll per il consumo di terze parti, questo dovrebbe essere evitato. – tster

+0

Sì, ma come lei stesso ha sottolineato, si applica solo alle biblioteche. La tua risposta non lo dice. – Timwi

0

Gli accessor delle proprietà (get, set methods) consentono di modificare l'implementazione in futuro. Ad esempio, è possibile iniziare con un campo di supporto (membro di classe privato), ma in seguito la proprietà potrebbe diventare un risultato di alcuni calcoli. Inoltre, la sintassi delle proprietà ti consente di avere membri di sola lettura, in modo che tu possa modificare il valore solo all'interno della tua classe, mentre il mondo esterno può solo leggerlo.

+1

Questo argomento spiega le proprietà di sola lettura, ma non quelle di lettura/scrittura. Se in seguito trovi la necessità di una proprietà perché si trasforma in un valore calcolato, puoi comunque introdurre la proprietà. – Timwi

13

Microsoft consiglia l'uso di proprietà pubbliche al posto di campi pubblici per ragioni di compatibilità binaria . Questo è solo un problema se stai scrivendo una libreria (a cui potranno accedere altri programmi).

In sostanza, immaginare questo scenario:

  • Si crea una biblioteca con un campo pubblica
  • Qualcun altro scrive un programma che utilizza la libreria e accede quel campo pubblico
  • ora vuoi cambia il tuo campo in una proprietà pubblica perché devi convalidare il valore di input, oppure la proprietà è diventata il risultato di un calcolo o vuoi che generino eccezioni perché è obsoleta o altro.
  • L'utente tenta di aggiornare la libreria, ma non il programma che utilizza la libreria.

Questo interromperà completamente il programma: smetterà di funzionare e si arresta solo in modo anomalo. Tuttavia, se al posto del campo avessi una proprietà pubblica fin dall'inizio, potresti scambiare la libreria.

Questo è, ovviamente, rilevante solo per le biblioteche. In tutti gli altri casi, il consiglio non è molto pertinente e puoi usare i campi se lo desideri. Se successivamente trovi che hai bisogno di una proprietà, puoi comunque cambiarla in una proprietà e il tuo programma verrà comunque compilato correttamente.

+1

Spiegazione molto bella. – Hari

0

Ecco alcuni motivi del perché utilizziamo proprietà pubbliche anziché campi pubblici.

  1. È possibile scrivere i codici più complessi in metodi get/set, mentre c'è solo un singolo valore nei campi.
  2. Proprietà rende il codice più "OO". Dì una classe chiamata Persona, noi possiamo facilmente intuire che esiste una proprietà chiamata "Nome" al suo interno. Ma un campo pubblico denominato "Nome" è in realtà strano.
  3. Alcuni attributi funzionano solo per le proprietà (AttributeTargets.Property).
0

Il motivo dell'utilizzo delle proprietà è molto semplice. Puoi sempre modificare la gestione del codice ottenendo/impostando il suo valore senza interrompere alcun programma esterno a seconda del tuo lavoro, questo non è possibile con i campi.Inoltre, le proprietà possono essere contrassegnate come virtuali e, quindi, possono essere ridefinite dalle classi figlie, sempre senza compromettere la compatibilità.

Problemi correlati