2012-01-24 43 views

回答

5

公開接口而不是具體類型是一種很好的做法。接口在代碼維護方面總是更加抽象和靈活,所以你可以升級實現而不會違背客戶端的合同。

2

是 - 例如,如果您想通過其他實現IList接口的集合類型來實現該屬性,則公共接口將不需要更改。

7

將其定義爲IList<T>(與類相對的接口,List<T>)使該類的實現者免費使用另一個實現相同接口的類,如果需要的話,不需要更改任何調用代碼。

一般的想法是,該類是說這個屬性讓你得到一個像列表一樣的對象,但是可以在內部實現,根據需要進行更改。

3

是的,IList是一個接口,而List是一個類。

如果將屬性聲明爲接口,則屬性的任何使用者都可以僅依賴於約定的接口而不是實現來使用該屬性。簡而言之,這可以使屬性的實際類型更容易更改,而不會破壞使用它的任何代碼。

2

是的,如果您使用的是獨立於底層集合實現的接口。它可以是實現接口IList的任何集合。

2

誰寫的代碼是正確的。建議使用List作爲實現細節,並且所有公共屬性都公開該接口。

2

IList<T>是一個通用的接口,它不僅通過List<T>,而且還通過例如Array來實現。

通過以這種方式定義屬性返回類型,您有一種通用的方式來訪問返回類型,從其實際類型indiferent。

1

IList是一個接口。列表是一個具體的類。將來,可以編寫一個實現IList中定義的方法的新類,並且可以將該屬性設置爲新類。通過這種方式,IList提供了更大的靈活性,即使它現在還沒有出現。

1

IList<T>接口定義了有關添加,刪除,檢查內容,遍歷和(唯一地指向IList而不是ICollection和IEnumerable)索引元素的非常基本的行爲。

這不是List定義行爲的總和。除了上述所有內容之外,您還可以對列表進行排序但不對IList進行排序,可以執行更高級的搜索,可以操縱列表的只讀質量,可以執行基於謂詞的操作,例如檢查是否全部列表中的元素使條件成立等等。

使用IList是因爲它通常是「鬆散耦合」依賴關係的良好實踐。如果你需要一個IList,你需要一個實現該接口的類的實例。它不一定是System.Collections.Generic.List。如果您需要排序功能,您可以執行以下兩項操作之一:將類定義爲具體,或者因爲所有IList都是IEnumerables,您可以插入Linq庫,這將實際上使您可以使用具體的List (儘管有點慢)。另外,一些ORM和其他庫需要持久性或其他可操作類中的子項集合成爲IList,以便庫可以使用自己專門的IList實現(例如延遲加載,嘲弄或其他方式動態收集)。