【问题标题】:C#: Action delegate vs explicit delegateC#:动作委托与显式委托
【发布时间】:2009-09-09 05:12:28
【问题描述】:

简单说一下:人们对于将 Action 委托用于公共类事件与定义自己的事件委托类型有何想法?我知道许多“次要”委托使用 Actions,例如 lamdas 和 .ForEach() 扩展方法等,但对于实际的类事件成员,使用 Actions 是个好主意吗?什么是该领域的“最佳实践”。

谢谢

【问题讨论】:

    标签: c# .net delegates events


    【解决方案1】:

    我使用EventHandler<TEventArgs> 代替Action 来声明任何事件。它消除了我定义自己的委托类型的需要。它还具有强制数据类型从 System.EventArgs 派生的额外好处,因此可以很好地与 .Net 事件模式配合使用。

    【讨论】:

    • 但它确实会强制您汇总 TEventArgs 的实现,即使您只想返回一个值...话虽如此,一个 [ScalarEventArgs where T: struct] 就足够了.
    • 符合 .NET 事件模型真的值得努力创建一个继承自 System.EventArgs 的容器类吗?不遵循这个模型,我真正失去了什么?
    • 可能发生的一件事是,如果您稍后需要返回一些与您的事件有关的额外信息,您所要做的就是将其添加到您的 EventArgs 类中。就好像你返回说 Action 无论如何你总是必须返回一个字符串,如果你改变它,它会破坏你所有使用它的代码。
    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多