2010-12-10 59 views
2

我想创建无法为自定义事件重载委托?

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

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

编辑:谢谢你的回答,我理解技术原因,但我仍然想做的事情从表达的角度来看是有道理的,所以我很难过.net框架没有办法做到这一点。

+0

委托只是存储函数....有点像函数指针,但更容易使用的概念:) – Machinarius 2010-12-10 12:53:11

+0

委托是一种类型,就像一个类。你不能重载类型。 – 2010-12-10 14:48:55

回答

1

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

public delegate void ValueChangedHandler(int value); 

所以,你已经创建了一个类ValueChangedHandler。所以再次如果你正在写

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

那么它是在同一名称空间下的两个同名的类。所以编译器不会允许。

1

我不确定你可以重载代表,从来没有见过它。

我的建议是这样的:

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

希望这有助于

4

你混淆代表和方法......方法可以被覆盖,代表不了。

代表是一种类型,你可以声明ValueChangedHandler类型的变量:

ValueChangedHandler handler; 

如果你可以重载的代表,对其中ValueChangedHandler超载将这段代码是指?

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

+0

没错。这就像在同一个命名空间中创建两个具有相同名称的类。代表是一种类型。 – decyclone 2010-12-10 17:51:03

+0

技术上是的,但从用户的角度来看,我想做的事情是有道理的。 – user310291 2010-12-11 19:05:27

+0

也许你应该更详细地描述你想要的东西......我不明白具有相同名称的2个委托类型如何以任何方式帮助你。 – 2010-12-11 23:20:36

1

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

通常的做法也是延长的事件处理程序的paraterers:

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

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

+0

什么是密封代表? – 2010-12-10 13:05:49

+0

http://msdn.microsoft.com/en-us/library/system.delegate.aspx Delegate类是委托类型的基类。但是,只有系统和编译器可以从Delegate类或MulticastDelegate类中明确派生。从委托类型派生新的类型也是不允许的。委托类不被视为委托类型;它是用来派生委托类型的类。 – dhinesh 2010-12-10 13:07:59

+0

你说得对,我已经更新了我的答案。 – 2010-12-10 13:09:32