ho sempre fatti valere come modoEventi Invocare, H (args) vs EventName .Invoke()
void onSomeEvent(string someArg) {
var h = this.EventName;
if (h != null) {
h(this, new MyEventArgs(someArg));
}
}
Oggi VS 2015 mi dice che questo può essere semplificata:
MyEvent?.Invoke(this, new MyEventArgs(someArg));
A alcune domande su questo secondo metodo, che io non ho visto prima:
- Presumibilmente il
?
dopo il nome dell'evento è un controllo se il gestore è nullo? - Supponendo che il gestore non è NULL,
.Invoke()
sembra abbastanza semplice - Ho usato il primo esempio per anni e mi rendo conto previene condizioni di gara ... presumibilmente il
?.Invoke()
del secondo esempio lo fa così?
Perché pensi che la nuova sintassi lo leggerà due volte quando appare solo una volta nella fonte? – SLaks
@SLaks - Non lo so. Forse è la mia mancanza di comprensione di ciò che effettivamente causa la condizione della razza, che tu (e Jon) sembra implicare è causato dalla sua lettura più di una volta? – jleach
Non so chi ha scritto il codice per riconoscere quel particolare pattern di codice e determinare che potrei usare una nuova funzionalità per implementarlo invece ... uno dei tanti motivi per cui VS è l'IDE più impressionante che abbia mai visto. – jleach