interface IDrawable{
void Draw();
double ReturnArea(Delegate del);
}
public double ReturnArea(Delegate del){
return del();
}
del()
突出显示,我收到了"Method name expected"
。基本上我的问题是如何让这个接口方法作为参数委托,让我使用它们将在方法中提供的任何功能?
答案 0 :(得分:1)
您没有指定委托的返回值或其参数。使用Delegate
时,实际的方法签名在编译时是未知的。因此,当调用时,编译器无法推断出正确的类型,无论是返回值还是参数。因此,您可以为您的ReturnArea
方法提供任何委托。因此,即使以下内容也是有效的:
ReturnArea(() => Console.WriteLine("this method doesn´t return anything"));
但是,当您在编译时知道实际类型时,没有理由留在通用Delegate
上。您可以使用强类型代理,例如Func<double>
:
interface IDrawable
{
void Draw();
double ReturnArea(Func<double> del);
}
//...
public double ReturnArea(Func<double> del)
{
return del();
}
如果您真的需要使用Delegate
的通用方法,则必须改为编写:
public double ReturnArea(Func<double> del)
{
return del.DynamicInvoke();
}