2011-01-12 12 views
17

Esistono alcune librerie .NET che utilizzano metodi per l'accesso ai dati dell'oggetto invece dei getter i.i HttpWebResponse.GetResponseStream().Quando utilizzare il metodo GetXXX() e una proprietà Getter

Inoltre, vi sono esempi di accesso a un flusso da parte di una proprietà i.e HttpResponse.OutputStream.

La mia domanda è quando utilizzare quale forma di accesso e perché?

risposta

9
+0

Che afferma che è male avere proprietà che restituiscono array. Qualcuno può approfondire * perché * questo è male? –

+1

Poiché il contenuto dell'array può essere modificato in qualsiasi valore arbitario da chiunque possa ottenere un riferimento ad esso: http://blogs.msdn.com/b/ericlippert/archive/2008/09/22/arrays-considered- some-nocivo.aspx – thecoop

+0

Se si restituisce un array da una proprietà, si restituisce effettivamente un puntatore a tale matrice. Questo significa che l'hai fatto improvvisamente in modo che un altro codice possa modificare il tuo array, anche se non fornisci un metodo setter. Quindi il contenuto dell'array potrebbe essere cambiato senza che tu lo sappia. – GendoIkari

1

La mia opinione che, sono sicuro, raggiungerà -10 molto velocemente, è che si dovrebbero usare solo le proprietà per la serializzazione. In tutti gli altri casi è preferibile chiamare il metodo esplicito perché quando lo guardi, sai che viene invocato un metodo con possibili effetti collaterali.

Immagino che la risposta "corretta" (tm) sia che quando tutto il tuo metodo dovrebbe restituire il valore, è ok usare getter/setter, ma se c'è del lavoro da fare, usa un metodo.

+3

Proprietà getter dovrebbero ** mai e poi mai * avere effetti collaterali, se si hanno effetti collaterali sono d'accordo utilizzare un metodo invece. – BrokenGlass

+0

Un po 'semplicistico. Le proprietà non sono così monouso; consentono di eseguire operazioni che richiedono lavoro come semplici assegnazioni/recuperi, evitando la palude di metodi per alcuni dati e campi per gli altri (e riducendo la complessità degli usi di refactoring di un campo che ora utilizza il lavoro interno). – KeithS

3

Buona domanda. L'articolo This evidenzia alcuni punti positivi. In generale, utilizzo i metodi quando il calcolo è costoso e le proprietà quando il calcolo non è costoso (vale a dire viene restituito un valore memorizzato).

8

Buona domanda. Sebbene una proprietà sia poco più dello zucchero di sintassi per una coppia di metodi get/set, è necessario utilizzarne due in tempi diversi.

In generale, è consigliabile utilizzare un getter struttura in stile quando:

  • Il valore deve essere restituito rappresenta i dati dei campi-simile (in genere primitivi tipi/valore, ma un riferimento a un altro oggetto di dominio è anche bene)
  • il calcolo eventuale di produrre tale valore è relativamente economico/effetto collaterale libero
  • ottenere lo stesso valore due volte per produrre lo stesso valore dato gli stessi ingressi

In genere, è necessario utilizzare un metodo getter quando:

  • L'oggetto restituito viene creato per lo scopo (ad es. metodi di fabbrica)
  • La valutazione del valore restituito richiede effetti collaterali (ad es. toccare un file system, database o modificare altri valori)
  • Ottenere il tipo di ritorno due volte produce due risultati distinti (cioè due flussi, connessioni db, ecc.) .

In una frase, se concettualmente il valore necessario è qualcosa l'oggetto HA, utilizzare una proprietà. Se il valore necessario è il risultato di qualcosa che l'oggetto FA, utilizzare un metodo.

Problemi correlati