c# - Action<T> 与委托(delegate)事件

标签 c# delegates

我见过开发人员非常交替地使用以下代码。这些之间的确切区别是什么,哪些符合标准?它们是否相同,如ActionFunc<T>也是委托(delegate):

public event Action<EmployeeEventAgs> OnLeave;
public void Leave()
{
    OnLeave(new EmployeeEventAgs(this.ID));
}

对比

public delegate void GoOnLeave(EmployeeEventAgs e);
public event GoOnLeave OnLeave;
public void Leave()
{
    OnLeave(new EmployeeEventAgs(this.ID));
}

最佳答案

Fwiw,这两个示例都没有使用标准的 .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> 与委托(delegate)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282476/

相关文章:

c# - 修改private readonly成员变量?

c# - 如何创建 ItemSource Xamarin 命令

ios - 解雇 Controller 后未调用委托(delegate)

C#:给定 src => src.property,如果你有一个字符串 "propertyname",代码选择属性?

iphone - 为什么我在两个 vc 之间的委托(delegate)不起作用?

c# - Semaphoreslim.Wait(0)(以防止多次执行)导致不执行的可能性

c# - MaskedTextBox 中的 IP 地址?

c# - ASP.NET 双列表框使用 JQuery 更新了客户端,以及如何在服务器端检索结果

c# - 委托(delegate)添加和删除

objective-c - ( 符合协议(protocol) : && RespondsToSelector: ) vs just ( respondsToSelector: )