委托中的所有方法都是平等对待还是其中一些是特殊的?

时间:2016-10-20 08:46:01

标签: c# delegates

我最近了解到委托不是指向ONE函数的指针,而是指向函数的LIST(称为"调用列表")。 我想知道列表中的方法之间是否有任何区别:是其中之一,还是其中几个,有点特别?是否有一些存储在除调用列表之外的其他地方?

我问,因为我在MSDN文档(https://msdn.microsoft.com/en-us/library/system.delegate.method(v=vs.110).aspx)中找到了一个属性Delegate.Method,其中显示了

  

Delegate.Method Property:

     

获取委托代表的方法。

假设存储在委托中的所有方法都被平等对待,我不清楚它们的意思是什么方法。最有可能的意思是第一个,但这只是猜测。谁知道谁?

1 个答案:

答案 0 :(得分:4)

刚试过它:

public class Program
{
    public delegate int Operation(int x, int y);

    public static int Add(int x, int y)
    {
        return x+y;
    }

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

    public static void Main()
    {
        Operation o = new Operation(Add);
        o += Sub;
        Console.WriteLine(o.Method);
    } 
}

输出是最后指定的方法:

  

Int32 Sub(Int32,Int32)

尽管Method属性将返回最后一个方法,但它并没有区别对待它并且它与其他方法不同(除了这是添加到delagate并根据@Dennies_E commenet的最后一个方法的事实。委托返回任何值,它将是最后一个方法返回值,在本例中为Sub方法返回值)。

如果您想查看所有assigend方法,可以使用Delegate.GetInvocationList方法:

foreach(Opeartion operation in o.GetInvocationList())
{
    Console.WriteLine(operation.Method);
}

这将按照添加顺序打印所有方法:

  

Int32 Add(Int32,Int32)

     

Int32 Sub(Int32,Int32)