2009-06-24 29 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也是一個很好的理由。

相關問題