C#: Action委托 vs 显式委托

6

简单来说,人们对于在公共类事件中使用Action委托和定义自己的事件委托类型有什么看法?我知道很多人将Action用于“次要”的委托,例如在lamdas和.ForEach()扩展方法中使用,但是对于实际的类事件成员,使用Action是否是一个好主意?在这个领域中,什么是“最佳实践”。

谢谢

1个回答

11

我在事件声明中使用EventHandler<TEventArgs>而不是Action。这样就不需要定义自己的委托类型了。此外,它还有一个额外的好处,即强制数据类型派生自System.EventArgs,并且可以很好地与.Net事件模式配合使用。


1
但它确实强制你卷起一个TEventArgs的实现,即使你只想返回一个值...话虽如此,[ScalarEventArgs<T> where T: struct]就足够了。 - Benjol
符合.NET事件模型真的值得创建一个继承自System.EventArgs的容器类吗?如果不遵循这个模型,我真正失去了什么? - MrLane
3
如果你需要在事件中返回一些额外的信息,你可以将其添加到EventArgs类中,这样做可以避免破坏代码。而如果你使用Action<String>返回信息,那么无论如何都必须返回一个字符串,否则更改后会影响所有使用该代码的程序。 - Nathan W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接