为什么不在Array实例中内置Array方法?

时间:2009-06-24 13:38:19

标签: .net arrays char

很抱歉这可能是一个愚蠢的问题,但它让我烦恼......

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

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

4 个答案:

答案 0 :(得分:4)

感谢Pedro d'Aquino确定提供答案的其他问题。

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

请参阅以下问题:

答案 1 :(得分:2)

这些实用程序方法不需要属于这些类。这加强了Single Responsibility Principle

(编辑)我对Java感到困惑

About static members):

  

可以使用静态类成员   单独的数据和行为   独立于任何对象标识:   数据和功能不会改变   不管发生了什么   宾语。可以使用静态类   什么时候没有数据或行为   依赖于对象的类   身份。

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

答案 2 :(得分:1)

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

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

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

或按您想要的方式行事。排序时一样

答案 3 :(得分:1)

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

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

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