Почему этот кусок кода не компилируется?
delegate int xxx(bool x = true);
xxx test = f;
int f()
{
return 4;
}
Почему этот кусок кода не компилируется?
delegate int xxx(bool x = true);
xxx test = f;
int f()
{
return 4;
}
Необязательные параметры предназначены для использования на вызывающей стороне, а не на том, что эффективно похоже на реализацию интерфейса с одним методом. Так, например, это должно скомпилироваться:
delegate void SimpleDelegate(bool x = true);
static void Main()
{
SimpleDelegate x = Foo;
x(); // Will print "True"
}
static void Foo(bool y)
{
Console.WriteLine(y);
}
Что произойдет test(false)
? Это повредит стек, потому что подписи должны совпадать.
Попробуйте так:
static int f(bool a)
{
return 4;
}
Поскольку необязательные параметры не изменяют базовую сигнатуру метода, что важно для делегатов.
Ваш код ожидает, что необязательный параметр не будет в сигнатуре метода, если вы его не используете - это неверно.