我已经看到开发人员可以交替使用以下代码。这些之间的确切区别是什么?按标准划分是哪些?它们是一样的吗,因为ActionFunc<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/

10-11 08:08