2012-04-28 9 views
15

È buona norma utilizzare il campo privato o la proprietà quando si scrive codice nella classe che li contiene?All'interno della classe di contenuto, Usa proprietà o campo?

Ad esempio, se si dispone di questa coppia campo/proprietà, classi all'esterno di, questa classe deve utilizzare la proprietà. Che dire del codice all'interno della classe? Dovrebbe usare il campo privato, o dovrebbe anche passare attraverso la proprietà?

private string _foo; 

protected string Foo 
{ 
    get { return this._foo; } 
} 

private void SomeMethod() 
{ 
    string dummyVariable = "snuh" + this._foo; // So, this... 
    string dummyVariable = "snuh" + this.Foo; // ... or this? 
} 

Un vantaggio di utilizzare la proprietà qui, è che se non v'è alcuna logica nel getter, sarà ancora eseguito. Sono curioso di sapere se c'è una politica di best practice da seguire qui.

+1

Il mio ** parere ** è che non importa (dato che la tua proprietà non fa niente di speciale) purché tu sia coerente, ma sono curioso di sapere cosa hanno da dire gli altri. – Tung

+0

possibile duplicato di [Best practice sull'uso locale di Proprietà x campo privato] (http://stackoverflow.com/questions/833047/best-practice-on-local-use-of-private-field-x-property) – Matt

+0

Una nota sulla nomenclatura: stai usando il termine "variabile" in modo errato. In questo caso, intendi "campo". –

risposta

8

Quando si utilizza Auto-Implemented properties, non si dispone di una scelta - si necessario utilizzare la proprietà, mentre non si ha alcun accesso al campo generato.

Se la proprietà non è semplice e svolge un lavoro aggiuntivo (convalida, eventi di attivazione ecc.), È necessario chiamare la proprietà per centralizzare l'accesso e la logica.

Se avete tutte le altre proprietà (cioè una semplice proprietà senza alcuna logica e un campo di supporto) vorrei chiedere perché non sono uno di cui sopra ...

Con l'esempio che hai dare, fa poca differenza - è più importante essere coerenti con il modo in cui li usi e si riduce davvero all'estetica personale e allo stile di codifica.

+1

Mi vengono in mente due casi di utilizzo per proprietà semplici e non automatiche: proprietà con valori iniziali non predefiniti (C#) o proprietà con un setter privato (VB.NET). – Heinzi

+0

@Heinzi - Vero, e la parte della mia risposta riguardo l'esempio si applicherebbe anche a quelli ... – Oded

Problemi correlati