为什么GetInvocationList of System.委托类返回数组

本文关键字:返回 数组 GetInvocationList of System 为什么 | 更新日期: 2023-09-27 18:15:40

我试图了解委托是如何工作的,所以我观察了层次结构,并找到了系统的调用列表。委派实际上是一个数组。如果所有的方法都调用先进先出原则,为什么不存储在堆栈中的委托?

也就是说为什么要签名方法GetInvocationList()看起来不像public virtual Stack<Delegate> GetInvocationList()而不是public virtual Delegate[] GetInvocationList()或我错过了什么?

为什么GetInvocationList of System.委托类返回数组

  1. 委托是。net一开始就有的语言特性。
  2. 存储调用列表的数据结构只是一个设计决策,但它不可能是Stack<T>,因为这个集合是在。net 2.0中引入的(早期版本根本没有泛型集合或泛型,它们是在。net 2.0/CLR 2.0中引入的)

基于这两点,我怀疑它从未从Array更改为另一种数据结构,因为这意味着。net 1。X代码会被破坏,所以他们决定保持向后兼容性。

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