2008-09-29 73 views
5

換句話說,是不是正確的使用方法:的在c#中使用繼承而不是名稱別名是正確的嗎?

public class CustomerList : System.Collections.Generic.List<Customer> 
{ 
    /// supposed to be empty 
} 

代替:

using CustomerList = System.Collections.Generic.List<Customer> 

我寧願使用第一種方法,因爲我剛剛定義CustomerList一次,每次我需要客戶名單我總是使用相同的類型。另一方面,使用名稱別名方法不僅迫使我必須在任何地方重新定義它,而且每次有人想要使用它時都會給出不同的別名(想想一個大團隊),從而導致代碼可讀性較差。

請注意,在這種情況下,意圖永遠不會擴展類,只是爲了創建一個別名。

回答

6

不要這樣做。當人們閱讀:

List<Customer> 

他們立即理解它。當他們閱讀:

CustomerList 

他們必須去弄清楚CustomerList是什麼,這使得你的代碼更難閱讀。除非你是唯一一個在你的代碼庫上工作的人,否則編寫可讀代碼是一個好主意。

11

好吧,除非你正在向基類添加一些功能,否則創建一個包裝器對象沒有意義。如果你真的需要,我會選擇第二個,但爲什麼不創建一個變量?

List<Customer> customerList = new List<Customer>(); 
+0

我同意「只使用一個變量」,但不認爲你應該提倡在@Trap想要使用它的方式使用別名。 – 2008-09-29 09:25:45

+0

這是真的,我也不會做,但我不知道是什麼原因,他需要做的無論是擺在首位,這是問題。 – 2008-09-30 00:02:37

1

這是那些'這取決於'的問題之一。

如果您需要的是一個新的類,除了您的其他需求以外,還可以像客戶列表一樣運行,那麼繼承就是這樣。

如果您只是想使用客戶列表,然後使用該變量。

1

如果您只是想節省打字時間,那就用後者。你不會遇到任何奇怪的繼承問題。

如果你真的想公開一個邏輯上不同的集合類型,然後使用前者 - 你可以返回並添加東西到它。

就個人而言,我只會使用List<Customer>並稱之爲一天。

1

我基本上同意埃德。如果你不需要實際延長泛型列表結構的功能,只需使用一個通用的列表:

List<Customer> customerList = new List<Customer>(); 

如果你確實需要再擴展功能通常,你會尋求在繼承。

第三種可能性是您需要從泛型列表構造中顯着更改功能的情況,在這種情況下您可能只需從IEnumerable繼承。這樣做可以使類在可枚舉操作中可用(例如「foreach」),但允許您完全定義所有類的行爲。

1

一個程序員在打字時的節省很可能成爲下一個程序員的維護噩夢。我想說的只是正確地輸入通用名稱,正如許多人在這裏所說的那樣。它更清晰,更準確地描述了您的代碼意圖,並且可以幫助維護程序員。 (誰可能是你,六個月和四個新項目!)

3

其實你也不應該使用。公共API中的correct approach according to the framework design guidelines is to either use or inherit from System.Collections.ObjectModel.Collection<T>(列表<T>應僅用於內部實現)。

但至於命名的具體問題,建議似乎是直接使用泛型類型名稱不走樣,除非你需要將功能添加到集合:

不要返回Collection <牛逼>來自對象 模型提供標準純 香草收集API。

是否從對象模型返回Collection <T> 的子類以提供 高級集合API。

4

我同意而不是使用這種方式的別名。你的團隊中沒有人應該以所提出的方式使用別名;這不是提供別名的原因。此外,從仿製藥的工作方式來看,無論您使用多少個地方,只有一個List類。

除了剛纔聲明和使用List<Customer>,你會最終想要的是列表傳遞給別的東西。避免通過混凝土List<Customer>,而是通過一個IList<Customer>ICollection<Customer>,因爲這將使這些方法更具彈性,更容易編程。

未來的某一天,如果您確實需要CustomerList集合類,您可以在其上實現ICollection<Customer>IList<Customer>並繼續將它傳遞給這些方法,而不會改變它們甚至不知道更好。

3

使用繼承做別名/ typedefing的問題是要求您重新定義相關的構造函數。

,因爲它會很快變得不可理喻做無處不在,它可能是最好的,以避免它的一致性的緣故。

相關問題