为什么这段代码不能编译?
delegate int xxx(bool x = true);
xxx test = f;
int f()
{
return 4;
}
答案 0 :(得分:13)
可选参数用于调用端 - 而不是实际上类似于单方法接口实现。例如,这个应该编译:
delegate void SimpleDelegate(bool x = true);
static void Main()
{
SimpleDelegate x = Foo;
x(); // Will print "True"
}
static void Foo(bool y)
{
Console.WriteLine(y);
}
答案 1 :(得分:2)
会发生什么test(false)
?它会破坏堆栈,因为签名必须匹配。
答案 2 :(得分:0)
尝试这种方式:
static int f(bool a)
{
return 4;
}
答案 3 :(得分:0)
因为可选参数不会更改方法的基础签名,这对委托很重要。
您的代码期望的是可选参数,如果您不使用它,则不在方法签名中 - 这是不正确的。