10

对不起,这可能是一个愚蠢的问题,但它困扰着我......

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

4 回答 4

4

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

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

请参阅以下问题:

于 2009-06-24T14:16:25.097 回答
2

这些是不需要属于这些类的实用方法。这强化了单一职责原则

(编辑)我对 Java 感到困惑

关于静态成员):

静态类成员可用于分隔独立于任何对象身份的数据和行为:无论对象发生什么,数据和函数都不会改变。当类中没有依赖于对象标识的数据或行为时,可以使用静态类。

线程安全的观点也是一个很好的理由。

于 2009-06-24T13:50:26.320 回答
1

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

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

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

或者按照你想要的方式去做。排序也一样

于 2009-06-24T13:43:27.957 回答
1

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

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

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

于 2009-06-24T13:43:42.027 回答