【问题标题】:Why are Array.Sort() and Array.IndexOf() methods static?为什么 Array.Sort() 和 Array.IndexOf() 方法是静态的?
【发布时间】:2008-10-07 04:48:13
【问题描述】:

一直很感兴趣,为什么 Array.Sort()Array.IndexOf() 方法是静态的,而类似的 ArrayList.Sort()ArrayList.IndexOf() 被设计为成员方法。感谢您的任何想法。

【问题讨论】:

  • Hans Passant here的好评

标签: .net collections framework-design


【解决方案1】:

在我看来,Array 类基本上是我们在程序中使用 [] 声明的固定大小数组的类表示(您可以将其类比为 int,它的类(结构)表示为 System.Int32)。

Array 类也不包含任何实例变量中的实际数组数据,但它仅提供静态实用程序函数,可用于在声明的固定大小数组中进行排序和搜索。

另一方面,ArrayList 是一个集合类,它提供动态大小的数组实现,并且它有自己的数据结构来包含数据。因此,上述方法是实例方法,因此它们可以处理该特定实例的数据。

【讨论】:

    【解决方案2】:

    ArrayList 这样的集合类封装了某种内部存储(可能是根据需要调整大小的数组,但也可以是链表或其他一些实现)。 IndexOfSort 这样的方法需要访问底层私有存储才能高效,因此它们必须是实例方法。

    另一方面,Array 没有封装,可以直接访问存储。 Array.IndexOfArray.Sort 方法不需要对数组数据进行任何特殊访问,因此它们也可以是静态方法。

    【讨论】:

    • 它们也可能是成员方法,对吧? int 也可以重命名为 integer,因为它对非程序员来说更具可读性,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2010-09-28
    • 1970-01-01
    • 2012-10-12
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多