C#中的事件调用者

Mic*_*haC 6 c# events

当我在Visual Studio中实现一个事件时,Resharper非常友好地为我创建一个事件调用器.我通常在过去手工完成这个,而我的调用者总是这样

    private void InvokePropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是Resharper创建的调用器看起来像这样(用手清理一下)

    private void InvokePropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler changed = PropertyChanged;

        if (changed != null)
        {
            changed(this, e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在jetbrains的人们知道关于c#的事情我不知道吗?拥有局部变量是否有一些技术优势,或者只是它们必须自动生成代码的工件?

Joh*_*ers 8

是.他们知道事件的订阅者数量可以在"if"和对事件处理程序的调用之间变化.它们在本地捕获它,它不再发生变化.


Bri*_*sio 5

我认为John Saunders可能有最好的答案.

为了记录,我甚至不再写"Invocators"了.我有扩展方法为我做,我只是打电话PropertyChanged.Fire(this, "propName");

有关详细信息,请参阅此文章.