代码之家  ›  专栏  ›  技术社区  ›  pistacchio

委托:方法名应为错误

  •  14
  • pistacchio  · 技术社区  · 15 年前

    我正在尝试让下面的简单委托示例工作。根据一本书,我把它从里面拿出来应该没问题,但我得到了 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());
    
            }
        }
    }
    

    有什么帮助吗?

    6 回复  |  直到 9 年前
        1
  •  32
  •   Hans Kesting    15 年前

    移除():

    D code = new D(x.ToString);
    

    你想 指定 方法,而不是 执行 它。

        2
  •  6
  •   Jon Skeet    15 年前

    我想你的意思是:

    D code = new D(x.ToString);
    

    注意没有括号。加上括号,这是一种方法 调用 -也就是说,你试图执行 x.ToString() 在那行代码中。没有括号,这是一个 方法组 -一个表达式,它告诉编译器查看具有该名称的可用方法(在该上下文中),这正是为了创建委托。

    你在用哪本书?如果它的示例中确实有括号,那么您可能需要向作者发送电子邮件(或者至少检查书的勘误表页面)。如果是深度C,我会去角落里哭…

        3
  •  3
  •   Jens    15 年前

    您需要将一个方法传入委托构造函数。

    x.ToString()
    

    不是方法,而是字符串。使用

    D code = new D(x.ToString); 
    
        4
  •  0
  •   cjk    15 年前

    尝试从方法的末尾去掉括号,您正在传递方法,因此不需要使用括号。

        5
  •  0
  •   Fitzchak Yitzchaki    15 年前
    D code = new D(x.ToString);   // Note the: ()
    

    您需要pas要在委托中执行的方法。您要做的是传递值而不是函数的签名。

        6
  •  0
  •   Darin Dimitrov    15 年前

    应该是:

    D code = new D(x.ToString);