Action Vs事件Action

public event Action delt = () => { Console.WriteLine("Information"); }; 

一个重载版本

 Action delg = (a, b) => { Console.WriteLine( a + b); }; ? 

我的意思是Action delegate是“事件动作”的重载版本?

它不称为过载。

基本上,有一组类型,声明如下:

 namespace System { delegate void Action(); delegate void Action(T a); delegate void Action(T1 a1, T2 a2); ... } 

它们中的每一种都是不同的类型,独立于其他类型。 当您尝试通过类型名称后面的<>的存在或不存在以及<>的类型参数的数量来引用它时,编译器知道您的意思。

event完全是另一回事,并没有发挥任何作用。 如果您对事件和委托之间的区别感到困惑,请参阅以下两个问题: 1 2

该事件不是“Action”,它被称为’delt’,它有一个Action类型的EventHandler委托。 通常,您希望您的事件具有符合标准事件模型的EvenHandler(例如MyHandler(Object sender,InheritsFromEventArgs参数))

Action和Action <>是委托类型,作为System命名空间的一部分存在。

严格来说,它们并不等同。 第一个event向匿名函数分配event ,而第二个event声明匿名函数。 像属性一样的事件在CLR中具有特殊含义,并遵循一些设计准则 。