我们可以为两个事件拥有相同的代表

时间:2010-04-13 06:24:06

标签: c# delegates events

我们可以为两个事件拥有相同的代表吗?哪些输入参数相同?或委托和事件有一对一的关系?

3 个答案:

答案 0 :(得分:4)

当然,许多事件都使用EventHandler作为简单委托。

或者您的意思是,您可以将多个事件订阅到同一个方法?这也是可能的,你可以订阅,例如订阅TextChanged - 从所有文本框到同一个委托的事件。特别是对于Validating和Validated事件,对于使用相同验证逻辑的所有字段只使用一种方法是有用的。

事件通常在.NET中进行多播,因此您可以将许多代理订阅到一个事件。例如,您可以为文本字段指定两个或三个验证方法,并将TextBox.Validating事件订阅到验证输入的一个方面的所有方法。

答案 1 :(得分:4)

您是指对两个不同的事件声明使用相同的委托类型,还是使用相同的委托实例来订阅两个不同的事件?两者都是允许的:

public event EventHandler Foo;
public event EventHandler Bar;
...
EventHandler handler = SomeMethod;
Foo += handler;
Bar += handler;

答案 2 :(得分:0)

只要事件处理程序相同,您就可以在任意数量的事件上拥有相同的处理程序。

来自MSDN

  

委托类型定义传递给处理事件的方法的参数集。 多个事件可以共享相同的委托类型,因此只有在尚未声明合适的委托类型时才需要执行此步骤。