2017-03-04 48 views
0

我尝试这样做:我的委托类型不工作“有望方法名”

class Program 
{ 
    public delegate int add(int x, int y); 
    public class ff 
    { 
     public static int addNumbers(int x, int y) 
     { 
      return x + y; 
     } 

     public static int substractNumbers(int x, int y) 
     { 
      return x - y; 
     } 
     static void Main(string[] args) 
     { 
      Delegate delegare = new add(ff.addNumbers); 
      Console.WriteLine(delegare(3,4)); 
     } 
} 

我不明白为什么我得到这个错误“预期的方法名”。 当我使用具有void函数的委托时,它可以工作。 有人可以帮我吗?

回答

3

您的delegare变量的类型只是Delegate。这可以参考任何代表。为了调用一个委托(以正常的方式),你应该有一个适当类型的表达式。和演示方法组转换 - -

固定的命名约定,并删除不必要的嵌套类后,你的代码看起来是这样的:

using System; 

public delegate int Int32Operation(int x, int y); 

class Program 
{ 
    public static int AddNumbers(int x, int y) 
    { 
     return x + y; 
    } 

    public static int SubtractNumbers(int x, int y) 
    { 
     return x - y; 
    } 

    static void Main(string[] args) 
    { 
     Int32Operation op = new Int32Operation(AddNumbers); 
     Console.WriteLine(op(3, 4)); // Prints 7 

     op = SubtractNumbers; // Method group conversion 

     Console.WriteLine(op(3, 4)); // Prints -1 
    } 
} 
+0

噢,对,非常感谢。 –

0

你应该试试这个:

add delegare = new add(ff.addNumbers); 

的自定义以来,代表类型应为add