我正在尝试使用以下简单的Delegate示例。根据我从中获取的一本书应该没问题,但我收到Method name expected
错误。
namespace TestConsoleApp
{
class Program
{
private delegate string D();
static void Main(string[] args)
{
int x = 1;
D code = new D(x.ToString());
}
}
}
任何帮助?
答案 0 :(得分:33)
删除():
D code = new D(x.ToString);
您希望指定该方法,而不是执行。
答案 1 :(得分:6)
我认为你的意思是:
D code = new D(x.ToString);
注意缺少括号。在括号打开的情况下,它是一个方法调用 - 即您试图在该行代码中执行x.ToString()
。没有括号,它是一个方法组 - 一个表达式,它告诉编译器查看具有该名称的可用方法(在该上下文中),正是为了创建委托。
答案 2 :(得分:3)
您需要将方法提供给委托构造函数。
x.ToString()
不是方法,而是字符串。使用
D code = new D(x.ToString);
答案 3 :(得分:0)
尝试从方法的末尾取出括号,传递方法,因此不需要使用括号。
答案 4 :(得分:0)
D code = new D(x.ToString); // Note the: ()
您需要传递要在委托中执行的方法。你正在做的是传递值而不是函数的签名。
答案 5 :(得分:0)
应该是:
D code = new D(x.ToString);