2014-11-04 52 views
0

我做了一個簡單的委託範例來試圖理解委託。下面是代碼:委託方法屬性

namespace DelegateExample 
{ 

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

public class SimpleMath 
{ 
    public static int Add(int x, int y) { return x + y; } 
    public static int Subtract(int x, int y) { return x - y; } 
    public static int Multiply(int x, int y) { return x * y; } 
    public static int Divide(int x, int y) { return x/y; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 

     Console.WriteLine("*******Simple Delegate Example************"); 

     BinaryOp d = new BinaryOp(SimpleMath.Multiply); 
     d += SimpleMath.Divide; 
     d += SimpleMath.Add; 

     Display(d); 

     Console.ReadLine(); 
    } 

    public static void Display(Delegate dobj) 
    { 
     foreach (BinaryOp del in dobj.GetInvocationList()) 
     { 
      int ans = del.Invoke(10, 10); 
      Console.WriteLine(ans); 
      Console.WriteLine("Method Name: {0}", dobj.Method);    
     } 
     Console.WriteLine("+++++++++++++++++++++++++++++++++++"); 
    } 
} 
} 

,這裏是輸出:

*******Simple Delegate Example********* 
100 
Method Name: Int32 Add(Int32, Int32) 
1 
Method Name: Int32 Add(Int32, Int32) 
20 
Method Name: Int32 Add(Int32, Int32) 
+++++++++++++++++++++++++++++++++++ 

我的問題: 在輸出時,爲什麼物業。方法在每種情況下返回相同的名稱(「添加」 ),但返回的實際結果是調用Multiply,Divide然後Add?

回答

1

因爲你在你的顯示方法制成的類型:

Console.WriteLine("Method Name: {0}", dobj.Method);    

當它應該是:

Console.WriteLine("Method Name: {0}", del.Method);