不能为自定义事件重载Delegate?

时间:2010-12-10 12:38:54

标签: c# winforms

我想创建

    public delegate void ValueChangedHandler(int value);
    public delegate void ValueChangedHandler(Object sender, int value);

它拒绝:怎么做或者不可能?

编辑:感谢您的回答,我理解技术原因,但我仍然希望从表现形式的角度来理解,所以我很沮丧.net框架没有办法做如此。

4 个答案:

答案 0 :(得分:4)

你让代表和方法感到困惑......方法可以被覆盖,代表也不能。

委托是一种类型,您可以声明ValueChangedHandler类型的变量:

ValueChangedHandler handler;

如果你可以重载委托,那么这段代码会引用ValueChangedHandler的重载?

重载代表只是没有意义......

答案 1 :(得分:1)

我不确定你是否可以重载代表,以前从未见过。

我建议的是这样的:

public delegate void ValueChangedHandler(params object[] list);

希望这有帮助,

答案 2 :(得分:1)

委托是一种类型。即如果您正在创建委托,那么您实际上正在创建一个派生自System.Delegate的类。

public delegate void ValueChangedHandler(int value);

因此,您已经创建了一个ValueChangedHandler类。所以,如果你正在写作

public delegate void ValueChangedHandler(int value, int j);

然后在单个命名空间下有两个具有相同名称的类。所以编译器不允许。

答案 3 :(得分:1)

由于ValueChangedHandler不是一个方法,而是一个类型,你不能重载它 - 你可以用不同的参数创建一个新的事件处理程序。

通常的做法是扩展事件处理程序的paraterers:

public delegate void EventHandler(object sender, EventArgs e);

您可以定义扩展EventArgs的自定义类以传递更多数据。