我正在尝试学习委托的工作方式,因此我查看了层次结构,发现System.Delegate的调用列表实际上是一个数组。如果使用FIFO原则调用所有方法,为什么不将代理存储在堆栈中?
换句话说,为什么签署方法GetInvocationList()
不看public virtual Stack<Delegate> GetInvocationList()
而不是public virtual Delegate[] GetInvocationList()
或我错过了什么?
答案 0 :(得分:-1)
Stack<T>
,因为这个集合是在.NET 2.0 中引入的(早期版本根本没有泛型集合或泛型,它们是在.NET 2.0 / CLR 2.0中引入的。基于这两点,我怀疑它从未从Array
更改为另一个数据结构,因为它意味着.NET 1.x代码将被破坏,因此他们决定保持向后兼容性。
Stack<T>
不是一个选项,因为调用列表在执行时不会释放每个处理程序。