动作及LT;> Vs事件动作

时间:2009-11-17 17:53:52

标签: c#

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

的重载版本
Action<int, int> delg = (a, b) => { Console.WriteLine( a + b); }; ?

我的意思是行动&lt;&gt; delegate是“事件动作”的重载版本?

3 个答案:

答案 0 :(得分:6)

这不称为过载。

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

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

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

event完全不同,并不参与其中。如果您对事件与委托之间的区别感到困惑,请参阅以下两个问题:1 2

答案 1 :(得分:2)

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

行动与行动&lt;&gt;是委托类型,并作为System命名空间的一部分存在。

答案 2 :(得分:1)

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