c# – .NET事件提升和NullObject模式

前端之家收集整理的这篇文章主要介绍了c# – .NET事件提升和NullObject模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们可以通过两种方式举办活动:
public event EventHandler MyEvent;

private void DoSomething()
{
    ...
    var handler = MyEvent;
    if (handler != null)
        handler(this,EventArgs.Empty);
}

public event EventHandler MyEvent = (o,e) => {} ;

private void DoSomething()
{
    ...
    MyEvent(this,EventArgs.Empty);
}

我更喜欢最后一个.它更短.
我的同事坚持第一个变种.

第一个优先于第二个优势吗?

解决方法

C#6的更新

在C#6中,您只需使用空条件运算符,如下所示:

PropertyChanged?.Invoke(this,args);

这是recommended by the Roslyn wiki

原始答案

Eric Lippert有a great blog post on Events and Races,如果你没有,你应该阅读.

可以认为第一个选项比第二个选项更安全,因为事件可以设置为null.有人可能会不小心修改课程.此外,如果反序列化实例,则第二种方法将不起作用(取决于您使用的序列化机制).

我有时会使用辅助方法来引发事件

static class Raiser
{
    public static void Raise<T>(this EventHandler<T> evnt,object sender,T args)
        where T : EventArgs
    {
        if (evnt != null)
        {
            evnt(sender,args);
        }
    }
}

class SomeClass
{
    public event EventHandler<EventArgs> MyEvent;

    private void DoSomething()
    {
        MyEvent.Raise(this,EventArgs.Empty);
    }
}
原文链接:https://www.f2er.com/csharp/244152.html

猜你在找的C#相关文章