2009-12-06 21 views
11

Eventuali duplicati:
Properties vs MethodsQuando utilizzare una proprietà rispetto a un metodo?

C'è qualche regola o migliori prassi generale da quando utilizzare una proprietà vs un metodo? Tecnicamente qualsiasi metodo senza parametri può essere fatto in una proprietà e qualsiasi proprietà può essere fatta come metodo, ma a volte quando decidere quando utilizzare l'una può essere offuscata.

Speravo di ottenere alcune regole che voi ragazzi tenevate in mente al momento di decidere tra i due.

risposta

12

Il livello generale è di circa effetti collaterali. Se chiamando un membro per ottenere un valore si ottiene solo quel valore è una proprietà. Se ci sono effetti collaterali, dovrebbe probabilmente essere un metodo.

Per dirla in un altro modo: le proprietà anche se non sono campi dovrebbero comportarsi in modo molto simile ai campi. Ciò significa non causare effetti collaterali, non impiegare troppo tempo per l'esecuzione e non generare eccezioni.

+6

Non si generano eccezioni? Cosa faresti se il valore impostato fosse un valore non valido, allora? Ho pensato che fosse una delle ragioni per usare le proprietà sui campi ... la possibilità di fare controlli sul valore prima di accettarlo. – Svish

5

Per aggiungere a ciò che ha detto il cletus.

Questo da MSDN: "Istruzioni per l'uso di proprietà" http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx vedere la sezione "Proprietà vs Metodi":

  • L'operazione è una conversione, come ad esempio Object.ToString.
  • L'operazione è abbastanza costosa da consentire all'utente di comunicare all'utente la possibilità di prendere in considerazione il caching del risultato.
  • L'ottenimento di un valore di proprietà utilizzando la funzione di accesso get avrebbe un effetto collaterale osservabile.
  • La chiamata del membro due volte in successione produce risultati diversi.
  • L'ordine di esecuzione è importante. Si noti che le proprietà di un tipo dovrebbero poter essere impostate e recuperate in qualsiasi ordine.
  • Il membro è statico ma restituisce un valore che può essere modificato.
  • Il membro restituisce un array. Le proprietà che restituiscono gli array possono essere molto fuorvianti. Di solito è necessario restituire una copia dell'array interno in modo che l'utente non possa modificare lo stato interno. Questo, unito al fatto che un utente può facilmente presumere che sia una proprietà indicizzata, porta a un codice inefficiente. Nell'esempio di codice seguente, ogni chiamata alla proprietà Methods crea una copia dell'array. Di conseguenza, verranno create 2n + 1 copie dell'array nel seguente loop.
1

proprietà utilizzo quando alcuni ehm .. proprietà è in rapida esecuzione (ad esempio ctrl.Color, ctrl.Text, ctrl.Width, DateTime.Now). ma se indica un processo, utilizzare il metodo (ad esempio str.GetHash(), machine.GetFqdn(), file.GetMd5()). così in un file md5, non si fanno una proprietà

questo enfatizzare il più when to use a method:

Il funzionamento è abbastanza costoso che si desidera comunicare all'utente che dovrebbero prendere in considerazione la memorizzazione nella cache del risultato.

si noti che DateTime di .NET.Ora, sebbene sia veloce così come una proprietà, è necessario che venga memorizzato nella cache quando viene chiamato più volte nel programma, anche l'uno vicino all'altro. hanno deciso di farne una proprietà, la proprietà ha la sensazione di currentness al suo interno, a differenza di quando si chiama un metodo, non ha la sensazione di istantness/currentness in esso. quindi è necessario tener conto del fatto che, anche quando si ottiene un valore e necessario essere memorizzati nella cache, ma se ha bisogno di sentire istante, utilizzare assolutamente la proprietà.

dopotutto, se qualcosa è veramente veloce e non sembra un'operazione costosa, deve avere un costrutto che possa trasmettere la sua solidità. Penso che questo sia il motivo per cui .NET è attraente (o qualsiasi linguaggio che abbia un costrutto di proprietà), non obbliga gli sviluppatori a usare il metodo quando puoi renderlo una proprietà, non obbliga gli sviluppatori a usare il metodo quando puoi fare un codice performante attorno agli operatori sovraccaricati, questa è la programmazione pragmatica al suo meglio

0

è una buona domanda. Non conosco nessuna buona pratica al riguardo. Secondo me, di solito è una questione di buon senso.

Le proprietà sono correlate all'oggetto/classe stesso e di solito lo descrivono. Il migliore esempio l'elemento UI, Background, Color, IsEnabled sono proprietà.

I metodi sono in genere un'azione che l'oggetto/classe può eseguire e può produrre risultati. Miglior esempio qui il metodo Show di un MessageBox. fa un'azione e restituisce un risultato.

0

Al livello fondamentale la decisione tra la scelta di una proprietà o un metodo dipende dall'argomento 'ha', 'fa'. Se le informazioni di cui hai bisogno sono un attributo o qualità vai con proprietà. Se è un'azione, allora metodi.

Ma a livello pratico può essere difficile implementarlo in questo modo tutto il tempo.

  • Come è stato giustamente sottolineato, le proprietà devono essere leggere, i metodi non devono essere.
  • Se le informazioni dipendono da un codice di inizializzazione chiamato in un costruttore, si dovrebbe preferire una proprietà.
  • Se le tue informazioni richiedono molte operazioni, utilizzare i metodi.
  • Se interessa un terzo elemento come un file o lo schermo o qualcosa del genere, utilizzare i metodi.
  • Non è possibile avere proprietà che non restituiscono nulla (nulla).
0

Dicendolo con parole di base, una proprietà descrive l'oggetto, mentre un metodo è un'azione che l'oggetto può eseguire. Per un oggetto che rappresenta un'automobile, drive() sarebbe un metodo e color sarebbe una proprietà.

Problemi correlati