时
public event Action delt = () => { Console.WriteLine("Information"); };
的重载版本
Action<int, int> delg = (a, b) => { Console.WriteLine( a + b); }; ?
我的意思是行动&lt;&gt; delegate是“事件动作”的重载版本?
答案 0 :(得分:6)
这不称为过载。
基本上,有一组类型,声明如下:
namespace System {
delegate void Action();
delegate void Action<T>(T a);
delegate void Action<T1, T2>(T1 a1, T2 a2);
...
}
它们中的每一种都是不同的类型,独立于其他类型。当您尝试通过类型名称后<>
的存在或不存在以及<>
中类型参数的数量来引用它时,编译器会知道您的意思。
答案 1 :(得分:2)
事件不是“Action”,它被称为'delt',它有一个Action类型的EventHandler委托。通常,您希望您的事件具有符合标准事件模型的EvenHandler(例如MyHandler(Object sender,InheritsFromEventArgs参数))
行动与行动&lt;&gt;是委托类型,并作为System命名空间的一部分存在。
答案 2 :(得分:1)
严格来说,它们并不等同。第一个为匿名函数分配event
,而第二个函数声明匿名函数。像属性一样的事件在CLR中具有特殊含义,并遵循一些设计guidelines。