對不起,什麼可能是一個愚蠢的問題,但它的煩我......爲什麼數組實例中沒有內置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