一个委托中的所有方法是否都被平等对待,或者其中一些是特殊的
本文关键字:或者 一个 是否 有方法 | 更新日期: 2023-09-27 18:13:51
我最近了解到委托不是指向一个函数的指针,而是指向一个函数列表(称为"调用列表")。我想知道列表中的方法之间是否有任何区别:是其中一个,还是其中几个,在某种程度上特别?它们中的一些是否存储在调用列表之外的其他地方?
我问,因为我在MSDN文档(https://msdn.microsoft.com/en-us/library/system.delegate.method(v=vs.110).aspx)中发现了一个属性Delegate.Method
,它说
委托。方法属性:
获取委托表示的方法。
假设在委托中存储的所有方法都被平等对待,我不清楚它们指的是哪个方法。很可能他们指的是第一个,但这只是一种猜测。有人知道吗?
刚刚测试过:
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属性将返回最后一个方法,但它并没有区别对待它,也没有特殊于其他方法(除了这是添加到委托的最后一个方法,并且根据@Dennies_E注释,如果委托返回任何值,它将是最后一个方法返回值,在这种情况下,子方法返回值)。
如果你想看到所有的赋值方法,你可以使用Delegate。GetInvocationList方法:
foreach(Opeartion operation in o.GetInvocationList())
{
Console.WriteLine(operation.Method);
}
这将按照添加的顺序打印所有的方法:
Int32 Add(Int32, Int32)
Int32 Sub(Int32, Int32)