我已经看到开发人员可以交替使用以下代码。这些之间的确切区别是什么?按标准划分是哪些?它们是一样的吗,因为Action
和Func<T>
也是一个委托(delegate):
public event Action<EmployeeEventAgs> OnLeave;
public void Leave()
{
OnLeave(new EmployeeEventAgs(this.ID));
}
VS
public delegate void GoOnLeave(EmployeeEventAgs e);
public event GoOnLeave OnLeave;
public void Leave()
{
OnLeave(new EmployeeEventAgs(this.ID));
}
最佳答案
首先,两个示例均未使用标准.NET约定。 EventHandler<T>
泛型应声明事件:
public event EventHandler<EmployeeEventArgs> Leave;
应该为引发事件的 protected 方法保留“On”前缀:
protected virtual void OnLeave(EmployeeEventArgs e) {
var handler = Leave;
if (handler != null) handler(this, e);
}
您不必这样做,但是任何人都可以立即识别出该模式,了解您的代码并知道如何使用和自定义它。
而且它的一大优势是不必在自定义委托(delegate)声明和
Action<>
之间进行选择,而EventHandler<>
是最好的方法。哪个回答您的问题。关于c# - Action <T> vs委托(delegate)事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2282476/