为什么System.Delegate类的GetInvocationList返回数组?

时间:2016-10-29 22:33:45

标签: c# .net delegates

我正在尝试学习委托的工作方式,因此我查看了层次结构,发现System.Delegate的调用列表实际上是一个数组。如果使用FIFO原则调用所有方法,为什么不将代理存储在堆栈中?

换句话说,为什么签署方法GetInvocationList() 不看public virtual Stack<Delegate> GetInvocationList() 而不是public virtual Delegate[] GetInvocationList()或我错过了什么?

1 个答案:

答案 0 :(得分:-1)

  1. 代理是.NET自成立以来的一种语言功能。
  2. 存储调用列表的数据结构只是一个设计决策,但它不能是Stack<T>,因为这个集合是在.NET 2.0 中引入的(早期版本根本没有泛型集合或泛型,它们是在.NET 2.0 / CLR 2.0中引入的
  3. 基于这两点,我怀疑它从未从Array更改为另一个数据结构,因为它意味着.NET 1.x代码将被破坏,因此他们决定保持向后兼容性。

    顺便说一下,似乎Stack<T>不是一个选项,因为调用列表在执行时不会释放每个处理程序。