Why we don’t recommend using List in public APIs


不推薦List<T>作API
緣由有以下兩點:
1.首先List<T> 設計之初就沒有設計成可擴展的,咱們不能從新其任何方法。這就意味着,咱們操做List<T>的時候卻不
能有任何的通知機制,而Collection<T>卻提供了SetItem虛方法以供重寫,以便於咱們在修改爲員信息或者添加成員的
時候能夠自定義實現通知機制。
2.其次List<T>有許多的成員在不少的使用場景下是相關聯的,這就是咱們所說的List<T>對外公開了過多的成員方法,
想象下,ListView中的Items屬性返回(包含了衆多屬性的)List<T>。來看看實際上ListView.Items的返回類型;它的方
式更簡單,相似於Collection<T>或ReadOnlyCollection<T>。性能

因爲List<T>與Collection<T>的內容比較多,你們感興趣能夠本身查看下,這裏只把Collection<T>的部分片斷
列出來了。優化

public class Collection<T> : IList<T>, IList, IReadOnlyList<T>
{
protected virtual void ClearItems()設計

protected virtual void InsertItem(int index, T item)blog

protected virtual void RemoveItem(int index)開發

protected virtual void SetItem(int index, T item)
}
並且其公開方法大概也只有10來個,而List<T>的公開發方法粗略的估計一下至少也得有30個以上。因此明顯的能夠看出
來,對於系統內部使用爲了方便,List<T>提供了更便利的操做,並且在性能上,存儲上作了大量的優化。可是若是做爲
API顯然有些過於龐大和不可控了。get

(原文:http://blogs.msdn.com/b/kcwalina/archive/2005/09/26/474010.aspx)it

相關文章
相關標籤/搜索