委托方法属性

问题描述:

我做了一个简单的委托范例来试图理解委托。下面是代码:委托方法属性

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?

因为你在你的显示方法制成的类型:

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

当它应该是:

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