Domanda

Si consiglia di impostare le variabili membro di una classe di base per protetti, in modo che le sottoclassi possono accedere a queste variabili?O è più consigliabile impostare le variabili membro di privati e lasciare che le sottoclassi di ottenere o impostare la variabile da getter e setter?

E se si consiglia di utilizzare i metodi getter e setter metodo, quando sono protetti variabili utilizzate?

È stato utile?

Soluzione

Questo è molto simile per questa domanda, sia per accedere alle informazioni all'interno della stessa classe, tramite proprietà o l'accesso diretto.E ' probabilmente la pena di leggere tutte queste risposte troppo.

Personalmente, non mi piacciono tutti i campi non-privato, con l'eccezione occasionale di static readonly campi con valori immutabili (se const o non).A me, di proprietà basta dare un miglior grado di incapsulamento.Modalità di memorizzazione dei dati è un attuazione una decisione, non un API decisione (a differenza di proprietà).Perché dovrebbe class Foo derivanti dalla classe di Bar la cura circa il attuazione di classe Bar?

In breve, avevo sempre andare per la proprietà, e io non uso protette variabili per qualcosa di diverso da "usa e getta" codice di test.

Con proprietà implementata automaticamente in C# 3.0, è più facile che mai per trasformare i campi in proprietà.C'è ben poco motivo non per farlo.

Altri suggerimenti

Corsi in altre assemblee possono derivare dalla non sigillato classi e possono accedere i campi protetti.Se un giorno decidono di fare quei campi in proprietà, le classi in altre assemblee devono essere ricompilate per lavorare con la nuova versione dell'assembly.Che si chiama "breaking compatibilità binaria", ed è forse l'unico solido motivo per cui non si dovrebbe mai esporre i campi, al di fuori dell'assemblea.

Io sono d'accordo con Jon.

Ma, io uso protetta variabile per il "superiore" eredità di classe a volte in alcune condizioni.Esempio, se si dispone di un oggetto che è di sola lettura e non è possibile impostare indietro, MA che si può utilizzare in una classe di bambini, non vedo perché dovrei avere un protetto Arrivare ad avere accesso a tale variabile.Un semplice protetto variabile di fare lo stesso incapsulamento, perché non è possibile impostare questa variabile e si può accedere a questa variabile solo dalla classe di bambini.

Ma set/get è il modo di fare per gli altri la situazione.

Questo è un trade-off qui.Setter e getter sono un po ' più lento di accedere ai campi direttamente, quindi se si sta facendo pesante di matematica e di lettura/scrittura di questi campi un sacco nel vostro sottoclassi, si dovrebbe andare per l'accesso ai campi direttamente.Ma questo è più come un'eccezione.

Normalmente, si dovrebbe segnare come "privati" e andare per metodi getter/setter.

Quindi la mia risposta è:accesso diretto per usato pesantemente campi, metodi getter/setter altrimenti.Usare il buon senso.

EDIT:Ho fatto alcune analisi e a quanto pare anche in modalità di Rilascio, ci possono essere fino al 20% di differenza di velocità tra i campi e le proprietà. Vedere il mio test qui: http://pastebin.com/m5a4d1597

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top