我最近了解到委托不是指向ONE函数的指针,而是指向函数的LIST(称为"调用列表")。 我想知道列表中的方法之间是否有任何区别:是其中之一,还是其中几个,有点特别?是否有一些存储在除调用列表之外的其他地方?
我问,因为我在MSDN文档(https://msdn.microsoft.com/en-us/library/system.delegate.method(v=vs.110).aspx)中找到了一个属性Delegate.Method
,其中显示了
Delegate.Method Property:
获取委托代表的方法。
假设存储在委托中的所有方法都被平等对待,我不清楚它们的意思是什么方法。最有可能的意思是第一个,但这只是猜测。谁知道谁?
答案 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)