2009-06-24 74 views
10

对不起,什么可能是一个愚蠢的问题,但它的烦我......为什么数组实例中没有内置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(); 
+1

哇,这么多错误的答案。 – VVS 2009-06-24 13:44:33

+2

你有合适的吗?发表它。 – 2009-06-24 13:51:00

+2

这个问题与http://stackoverflow.com/questions/389257/why-is-dotnets-char-islower-a-static-method非常相似。 – 2009-06-24 13:54:20

回答

1

你可以这样做是为了你自己,如果你使用.NET 3.0,使用扩展方法:

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

然后调用它像:c.IsLetter()

或按照你想要的方式做。排序相同

1

这是一个实施决定。我不知道框架设计师头脑中的所有事情,但我相信一个原因是允许以最小的努力对自定义类型进行排序。

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

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

2

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

(编辑)我用的Java

About static members)混淆:

静态类成员可用于 单独的数据和行为是 独立于任何物体的身份: 不管 对象发生了什么,数据和函数都不会更改 。当 中的数据或行为不依赖于对象 标识的类时,可以使用静态类 。

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

相关问题