委托:期望的方法名称

时间:2018-01-06 13:17:00

标签: c# interface delegates

interface IDrawable{
    void Draw();
    double ReturnArea(Delegate del);
}


public double ReturnArea(Delegate del){
       return del();
}

del()突出显示,我收到了"Method name expected"。基本上我的问题是如何让这个接口方法作为参数委托,让我使用它们将在方法中提供的任何功能?

1 个答案:

答案 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();
}