Wenn ich ein Ereignis in Visual Studio implementieren, ist Resharper so freundlich, um einen Event Invocator für mich zu erstellen. Ich habe dies in der Regel mit der Hand in der Vergangenheit, und meine invocators sah immer wie dieseEvent Invocators in C#
private void InvokePropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
aber die Invocator von ReSharper erstellt sieht wie folgt aus (bereinigt ein wenig von Hand)
private void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler changed = PropertyChanged;
if (changed != null)
{
changed(this, e);
}
}
Sie die Leute bei Jetbrains wissen etwas über C# Ich weiß nicht? Gibt es einen technischen Vorteil für die lokale Variable oder ist es nur ein Artefakt, dass sie den Code automatisch generieren müssen?
sind u sicher? Nicht beide "zeigen" auf dieselbe Aufrufliste? – BFree
Nicht unbedingt. Die gesamte Liste könnte sich im Allgemeinen ändern. Beachten Sie, dass ReSharper ein "allgemeines" Werkzeug ist. Sie scheinen davon auszugehen, dass das einzige, was mit dem Ereignis passiert, + = und - = ist. Vielleicht ja, vielleicht auch nicht, aber der "ReSharper" Weg deckt alle Grundlagen ab. –
Eigentlich ist die Anzahl der Teilnehmer egal, das kümmert sich der Delegierte selbst. Die Tatsache, dass der Delegat null ist, wenn keine Abonnenten vorhanden sind, ist jedoch wichtig. Wenn keine Abonnenten vorhanden sind, ist das Feld null. Sie kopieren eine Nullreferenz, wenn also ein Abonnent nach dem hinzugefügt wird, wenn Sie es nur nicht sehen, wird nicht fehlschlagen. –