2009-08-22 48 views
0

考慮例如:C# - 接口 - 型動初始化

IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" }; 

我可以用來初始化它 爲:

string[] _stringBag = new[] { "Alex", "Sam", "Gates", "Riaz" }; 

什麼是這裏有接口​​的優勢是什麼?

回答

5

好處在於它向讀者展示了您沒有使用它恰好是數組的事實。我傾向於將局部變量聲明爲最通用的類​​型,其中包含我需要的所有功能。例如,我會這樣做:

using (TextReader reader = File.OpenText(...)) 

而不是指定StreamReader

很少有巨大很重要,但它確實可以更容易地更改實施的細節。例如,假設無論出於何種原因,我們想要更改示例以使用List<T>而不是數組。

你可以改變這一點:

IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" }; 

這樣:

IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" }; 

,並知道它仍然編譯。一些語義可能不一樣,所以你仍然需要小心 - 但至少你知道它不會使用任何數組特定的方法。

+0

不是C而不是Python! *G – 2009-08-22 09:37:05

2

這是generics的一個示例,您將創建一個字符串數據類型的IList。

泛型引入到.NET 框架的類型 參數概念,這使得有可能設計 類和方法的是推遲 一種或多種類型 直到類或方法的說明書中被聲明 並由客戶端代碼實例化。例如,對於 示例,通過使用參數T的通用類型 ,您可以編寫單個 類,其他客戶端代碼可以使用 而不會產生運行時轉換或裝箱操作的成本或風險。

更多在這裏閱讀

What is cool about generics, why use them?

Do C# Generics Have a Perfomance Benefit?

+0

對不起!本來會構思我的問題,更具體。間接初始化接口有什麼好處(當然,我們不能爲接口創建實例)。 – user160677 2009-08-22 09:36:11

+0

我不認爲這個問題真的是關於泛型。 – 2009-08-22 09:42:18

2

有沒有優點還是缺點。如果你的代碼需要一個IList,那就給它一個。如果你的代碼需要一個數組,然後給它一個。

+0

有缺點。看到我的答案。 – 2009-08-22 09:43:22

1

我真的不明白爲什麼一個數組實現IList。當你調用Add時,它會拋出一個異常。 數組沒有IList語義,因爲它不可調整大小。這就是爲什麼我避免有IList陣列。如果我需要一個名單,我會寫這樣的:

IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" }; 

(PS:有相當多的問題與使用標準架構的集合接口,如缺少方法,甚至缺少的接口當你。正在處理集合接口,像往常一樣,例如在使用NHibernate時,你會發現它們有時設計的很糟糕,這個接口的開發人員似乎並沒有使用它們,只是我的看法。)

+0

這是因爲沒有獨立的接口,只有索引器和計數。 – 2009-08-22 09:35:54

+1

是的,請參閱我的PS關於收集界面。我對.NET收集設計感到非常失望。我的意思是,這些列表類型和語義自數十年以來就廣爲人知。爲什麼他們想出了一個帶有如此糟糕收藏品設計的新框架? – 2009-08-22 09:40:04