相关疑难解决方法(0)

调用EventHandler

我有以下EventHandler:

private EventHandler<MyEventArgs> _myEventHandler;
public event EventHandler<MyEventArgs> MyEvent
{
  add { _myEventHandler += value; }
  remove { _myEventHandler -= value; }
}  
Run Code Online (Sandbox Code Playgroud)

有人可以解释以下片段之间的区别吗?
Snippet EventHandler(A):

//Snippet A:
if (_myEventHandler != null)
{
  _myEventHandler(new MyEventArgs());
}
Run Code Online (Sandbox Code Playgroud)

Snippet BeginInvoke(B):

//Snippet B:
if (_myEventHandler != null)
{
  _myEventHandler.BeginInvoke(new MyEventArgs(), ar =>
  {
    var del = (EventHandler<MyEventArgs>)ar.AsyncState;
    del.EndInvoke(ar);
  }, _myEventHandler);
}
Run Code Online (Sandbox Code Playgroud)

澄清一下:调用EventHandler"就像它"和使用一样有什么区别BeginInvoke

c# event-handling begininvoke

7
推荐指数
2
解决办法
2万
查看次数

事件处理程序提升方法约定

我只是在浏览并遇到了这个问题:

行动与委托事件

来自nobug的答案包括以下代码:

protected virtual void OnLeave(EmployeeEventArgs e) {
  var handler = Leave;
  if (handler != null)
    handler(this, e);
}
Run Code Online (Sandbox Code Playgroud)

使用"创建提升方法"快速修复时,Resharper也会生成类似的代码.

我的问题是,为什么这条线是必要的?:

var handler = Leave;
Run Code Online (Sandbox Code Playgroud)

为什么写这个更好?:

protected virtual void OnLeave(EmployeeEventArgs e) {
  if (Leave != null)
    Leave(this, e);
}
Run Code Online (Sandbox Code Playgroud)

c# delegates coding-style

6
推荐指数
2
解决办法
969
查看次数