为什么GetInvocationList of System.委托类返回数组
本文关键字:返回 数组 GetInvocationList of System 为什么 | 更新日期: 2023-09-27 18:15:40
我试图了解委托是如何工作的,所以我观察了层次结构,并找到了系统的调用列表。委派实际上是一个数组。如果所有的方法都调用先进先出原则,为什么不存储在堆栈中的委托?
也就是说为什么要签名方法GetInvocationList()
看起来不像public virtual Stack<Delegate> GetInvocationList()
而不是public virtual Delegate[] GetInvocationList()
或我错过了什么?
- 委托是。net一开始就有的语言特性。
- 存储调用列表的数据结构只是一个设计决策,但它不可能是
Stack<T>
,因为这个集合是在。net 2.0中引入的(早期版本根本没有泛型集合或泛型,它们是在。net 2.0/CLR 2.0中引入的)。
基于这两点,我怀疑它从未从Array
更改为另一种数据结构,因为这意味着。net 1。X代码会被破坏,所以他们决定保持向后兼容性。
BTW,似乎Stack<T>
不会是一个选项,因为调用列表在执行每个处理程序时不会被释放。