我有以下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?
我只是在浏览并遇到了这个问题:
来自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)