对不起,什么可能是一个愚蠢的问题,但它的烦我......为什么数组实例中没有内置Array方法?
int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();
char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
对不起,什么可能是一个愚蠢的问题,但它的烦我......为什么数组实例中没有内置Array方法?
int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();
char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
感谢Pedro d'Aquino确定这些提供答案的其他问题。
基本问题是结构上的实例方法不是线程安全的,而是静态方法。
看到这些问题:
你可以这样做是为了你自己,如果你使用.NET 3.0,使用扩展方法:
public static class Extensions
{
public static bool IsLetter(this chr)
{
return char.IsLetter(chr);
}
}
然后调用它像:c.IsLetter()
或按照你想要的方式做。排序相同
这是一个实施决定。我不知道框架设计师头脑中的所有事情,但我相信一个原因是允许以最小的努力对自定义类型进行排序。
任何实现iComparable的类都可以放入一个数组并进行排序。如果它是一个数组的方法,那么我将不得不为我的自定义类型编写一个新的数组类型。
另外,正如其他人所指出的,原始类型需要这种数组设计。
这些是实用程序不需要属于这些类的方法。这加强了Single Responsibility Principle
(编辑)我用的Java
(About static members)混淆:
静态类成员可用于 单独的数据和行为是 独立于任何物体的身份: 不管 对象发生了什么,数据和函数都不会更改 。当 中的数据或行为不依赖于对象 标识的类时,可以使用静态类 。
thread-safe point of view也是一个很好的理由。
哇,这么多错误的答案。 – VVS 2009-06-24 13:44:33
你有合适的吗?发表它。 – 2009-06-24 13:51:00
这个问题与http://stackoverflow.com/questions/389257/why-is-dotnets-char-islower-a-static-method非常相似。 – 2009-06-24 13:54:20