c# – .NET事件提升和NullObject模式
发布时间:2020-12-15 08:35:48 所属栏目:百科 来源:网络整理
导读:我们可以通过两种方式举办活动: 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 Do
我们可以通过两种方式举办活动:
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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |