Quando implemento un evento in Visual Studio, Resharper è abbastanza gentile da offrirmi di creare un event call per me. Io di solito fatto questo a mano, in passato, e le mie invocators sembrava sempre cosìInvocatori di eventi in C#
private void InvokePropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
ma l'evocatore creato da ReSharper si presenta così (ripulito un po 'a mano)
private void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler changed = PropertyChanged;
if (changed != null)
{
changed(this, e);
}
}
Fare la la gente di jetbrain sa qualcosa di C# non lo faccio? C'è qualche vantaggio tecnico nell'avere la variabile locale, o è solo un artefatto di loro dover generare automaticamente il codice?
are u sicuro di questo? non entrambi "puntano" alla stessa lista di invocazione? – BFree
Non necessariamente. L'intero elenco potrebbe cambiare, in generale. Si noti che ReSharper è uno strumento "generale". Sembra che tu stia assumendo che l'unica cosa che accade con l'evento sia + = e - =. Forse sì, forse no, ma il modo "ReSharper" copre tutte le basi. –
In realtà il numero di abbonati non importa, che è curato dal delegato stesso. Il fatto che il delegato sia nullo se non ci sono abbonati, tuttavia, è importante. Se non ci sono abbonati, il campo è nullo. Copi un riferimento null, quindi se un abbonato viene aggiunto dopo il caso in cui non lo vedrai semplicemente non fallirà. –