2009-04-28 41 views
2

所以,可能是一个简单的问题,只是一个简单的答案,但我不知道它是什么,我很好奇:)。为什么编译器允许我做这样的事情?关于匿名方法签名和事件处理程序的简单问题

button1.Click += delegate { someFlag = true; }; 

(我只能用.NET 2.0,所以没有lamdas,但相同的概念)

我却无法做到这一点:

button1.Click += MyDelegateMethod 

// snip 

// compile error, signature does not match the signature of System.EventHandler. 
private void MyDelegateMethod() 
{ 

} 

我希望,我将不得不声明我的匿名方法为:

delegate(object sender, EventArgs e) { someFlag = true; }; 

我不明白为什么它是确定了一个匿名方法,但是当我写诗也不行e完整的方法本身。任何人?

回答

4

编译器可以确定您的匿名委托与按钮的类型相同单击委托,但不需要使用事件参数。

虽然指定了一个实际的方法,但是编译器会“看到”您指向的代码签名错误,因此无法编译。

+0

“编译魔术师”,这就是我想的:) – 2009-04-28 00:18:29

1

正如你所看到的,你正在使用delegate { ... }而不是delegate() { ... }这将允许C#为你完成工作。

+0

是的,好点。我认为它是一样的。你知道他们怎么说做--ass-umptions ... – 2009-04-28 00:19:12