【问题标题】:Why aren't Array methods built into an Array instance?为什么 Array 方法没有内置到 Array 实例中?
【发布时间】:2010-11-05 12:31:18
【问题描述】:

抱歉,这可能是一个愚蠢的问题,但它困扰着我......

int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();

char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();

【问题讨论】:

  • 你选对了吗?发布它。
  • 这个问题和stackoverflow.com/questions/389257/…很相似。
  • @Robert:我不太确定实际的“正确”答案是什么,但我可以找出错误的答案;)。我的猜测是,这主要是由一些我不知道的因素推动的设计决定。
  • @VVS:Thomas Edison 方法 - 找出 1000 种行不通的方法。 :D 我喜欢。
  • @Pedro:感谢您发布。我已将其翻译成社区 wiki 的答案。 stackoverflow.com/questions/1038406/…

标签: .net arrays char


【解决方案1】:

这些是 utility 方法,不需要属于这些类。这加强了Single Responsibility Principle

(编辑)我对 Java 感到困惑

(About static members):

静态类成员可用于 单独的数据和行为是 独立于任何对象身份: 数据和功能不变 不管发生什么事 目的。可以使用静态类 当没有数据或行为时 依赖于对象的类 身份。

thread-safe point of view 也是一个很好的理由。

【讨论】:

  • 谢谢 - 在我看来,数组应该能够自行排序 - 如果我想用 c++ 编写代码,我会:)
  • @bruno 很好,但是“isLetter”确实取决于对象的身份,不是吗?我的意思是,'A'.isLetter() 肯定不同于 '4'.isLetter()。
  • @Pedro,在这里,“无论对象发生什么,数据和函数都不会改变”。为了存在“c.isLetter()”,它必须在 char 结构中保存一个额外的 bool 值。实现会有所不同...
【解决方案2】:

感谢 Pedro d'Aquino 提出其他问题并提供答案。

基本点是结构上的实例方法不是线程安全的,但静态方法是。

查看这些问题:

【讨论】:

    【解决方案3】:

    这是一个实施决策。我不知道框架设计者脑子里在想什么,但我相信一个原因是允许以最少的努力对自定义类型数组进行排序。

    任何实现 iComparable 的类都可以放入数组并排序。如果它是数组的一个方法,那么我将不得不为我的自定义类型编写一个新的 Array 类型。

    另外,正如其他人所指出的,原始类型需要这种数组设计。

    【讨论】:

    • 我不同意您关于 Sort 是否是实例方法的推理。它仍然可以像静态方法一样工作,而无需编写自定义数组类型。
    • 该实例方法对每个子对象使用什么类型?
    • @Jeff Yates,但是如果你想改变排序的实现,你不需要改变 Array 类,但你可以在其他任何地方添加静态方法。但是由于 .net 语言中的 LINQ 能力,有扩展方法,看起来像实例方法,但是是静态方法。我认为它相当妥协。
    • @TcKs:您仍然可以提供 IComparable 实现或您自己的排序 - 即使有用于排序的实例方法。我不明白你在说什么。
    • @Tim:IComparable。你认为静态方法使用什么类型?
    【解决方案4】:

    如果您使用 .NET 3.0,您可以使用扩展方法自行完成:

    public static class Extensions
    {
    public static bool IsLetter(this chr)
    {
     return char.IsLetter(chr);
    }
    }
    

    然后将其称为:c.IsLetter()

    或者做你想做的事。排序也一样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2016-12-03
      • 2020-03-23
      相关资源
      最近更新 更多