Eventuali duplicati:
Convention question: When do you use a Getter/Setter function rather than using a PropertyCosa getter e setter dovrebbe e non dovrebbe fare
ho incontrato un sacco di opinioni divergenti su getter e setter ultimamente, così ho pensato Dovrei farlo nella sua stessa domanda.
Un mio previous question ha ricevuto un commento immediato (successivamente cancellato) che i setter dichiarati non dovrebbero avere effetti collaterali e un metodo SetProperty
sarebbe una scelta migliore.
In effetti, questo sembra essere Microsoft's opinion pure. Tuttavia, le loro proprietà spesso generano eventi, ad esempio Resized
quando viene impostata la proprietà Width
o Height
di un modulo. OwenP afferma inoltre "non si deve consentire a una proprietà di generare eccezioni, le proprietà non dovrebbero avere effetti collaterali, l'ordine non dovrebbe avere importanza e le proprietà dovrebbero tornare relativamente rapidamente."
Eppure Michael Stum afferma che devono essere generate eccezioni durante la convalida dei dati all'interno di un setter. Se il setter non lancia un'eccezione, come è possibile validare efficacemente i dati, come suggeriscono molte delle risposte a this question?
Che dire quando è necessario generare un evento, come fanno quasi tutti i Control di Microsoft? Non sei quindi in balia di chi ha sottoscritto il tuo evento? Se il loro gestore esegue una quantità enorme di informazioni o genera un errore, cosa succede al tuo setter?
Infine, che dire di lazy loading all'interno del getter? Anche questo potrebbe violare le linee guida precedenti.
Che cosa è accettabile inserire in un getter o setter e cosa si deve tenere in solo i metodi di accesso?
Edit:
Da un altro article in MSDN:
I
get
eset
metodi sono generalmente non è diverso da altri metodi. Possono eseguire qualsiasi logica di programma, generare eccezioni, essere sovrascritti e dichiarati con qualsiasi modificatore consentito dal linguaggio di programmazione. Notare, tuttavia, che le proprietà possono anche essere statiche. Se una proprietà è statica, esistono limitazioni su ciò che possono fare i metodiget
eset
. Vedere il riferimento del linguaggio di programmazione per i dettagli.
Ho letto quella domanda, le risposte e anche collegata ad essa nella mia stessa domanda. Non ho visto nulla riguardo all'innalzamento degli eventi, che credo meriti risposte diverse. – dlras2
@Rowland: Penso che sia abbastanza specifico per essere diverso. –
Chi ha votato per la migrazione a Super User? – ChrisF