Zawsze powoływać wydarzenia jak takWywoływanie wydarzenia, H (args) vs EventName .Invoke()
void onSomeEvent(string someArg) {
var h = this.EventName;
if (h != null) {
h(this, new MyEventArgs(someArg));
}
}
Dziś VS 2015 mówi mi, że to może być uproszczone:
MyEvent?.Invoke(this, new MyEventArgs(someArg));
A kilka pytań na temat tej ostatniej metody, których nie widziałem wcześniej:
- przypuszczalnie
?
po nazwie imprezy jest sprawdzenie, czy program obsługi jest zerowy? - Zakładając obsługi nie jest null,
.Invoke()
wydaje się dość prosta - Użyłem pierwszy przykład od lat i zdać sobie sprawę, że zapobiega warunków wyścigu ... przypuszczalnie
?.Invoke()
drugiego przykładu robi tak dobrze?
Dlaczego według ciebie nowa składnia odczytałaby go dwa razy, gdyby pojawiła się tylko raz w źródle? – SLaks
@SLaks - Nie wiem. Być może to mój brak zrozumienia, co tak naprawdę powoduje stan wyścigu, który wydaje ci się (i Jon) implikować, ponieważ jest czytany więcej niż raz? – jleach
Nie wiem, kto napisał kod, aby rozpoznać ten konkretny wzór kodu i zdecydować, że mógłbym użyć nowej funkcji, aby go zaimplementować zamiast ... jednego z wielu powodów, dla których VS jest najbardziej imponującym IDE, jakie kiedykolwiek widziałem. – jleach