2017-03-04 49 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