C# 为什么没有参数的委托要编译?
我不明白为什么会这样:C# 为什么没有参数的委托要编译?,c#,delegates,C#,Delegates,我不明白为什么会这样: private delegate int MyDelegate(int p1, int p2); private void testDelegate() { MyDelegate imp = delegate { return 1; }; } MyDelegate应该是一个指针,指向一个接受两个int参数并返回另一个int的方法,对吗?为什么允许我分配一个不带参数
private delegate int MyDelegate(int p1, int p2);
private void testDelegate()
{
MyDelegate imp = delegate
{
return 1;
};
}
MyDelegate应该是一个指针,指向一个接受两个int参数并返回另一个int的方法,对吗?为什么允许我分配一个不带参数的方法
有趣的是,这些都没有编译(正如我所预料的,它抱怨签名不匹配)
谢谢你的帮助
Ryan在第一个示例中,编译器可以很容易地看到没有使用任何参数,并替换一些假人
这看起来像是一个设计决策,从.NET 1中指定所有内容,到.NET 2中的匿名方法,再到.NET 3中的lambdas,如果委托不需要参数,那么您的第一个示例就是简写语法。如果您甚至需要其中一个,那么您需要提供全部,这就是第二个示例的第一部分无法编译的原因。非常感谢您的回答;这很有道理。我将上面的一个标记为“正确”,只是因为它首先到达那里。非常感谢。
private void testDelegate()
{
// Missing param
MyDelegate imp = delegate(int p1)
{
return 1;
};
// Wrong return type
MyDelegate imp2 = delegate(int p1, int p2)
{
return "String";
};
}