委托上的可选参数无法正常工作

时间:2011-04-12 13:45:41

标签: c# delegates optional-parameters

为什么这段代码不能编译?

delegate int xxx(bool x = true);

xxx test = f;

int f()
{
   return 4;
}

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)

因为可选参数不会更改方法的基础签名,这对委托很重要。

您的代码期望的是可选参数,如果您不使用它,则不在方法签名中 - 这是不正确的。