所以,这可能只是一个简单的答案,但我不知道它是什么,我很好奇:)。为什么编译器允许我做这样的事情?
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; };
我不明白为什么匿名方法可以,但是当我编写完整方法时不行。任何人吗?
答案 0 :(得分:4)
编译器可以确定您的匿名委托与按钮Click委托的类型相同,但您不需要使用事件参数。
当您指定实际方法时,编译器会“看到”您指向具有错误签名的委托,因此无法编译。
答案 1 :(得分:1)
正如您所看到的,您正在使用delegate { ... }
而不是delegate() { ... }
,这将允许C#为您完成工作。