在一些時候,你很希望引入自己定義的泛型集合。典型來講,自定義的泛型集合都應該由現有的來
collection
擴充套件。這樣就可以繼承它的行為,並且可以根據自己特定的需要來補充或者修改其功能。
在這些情況下,你可能嘗試使自定義泛型集合擴充套件自
list
。list
毫無爭議的是
system.collections.generic
命名空間中最強大最有活力的容器。然而,為了使其最優,該類阻止客戶重寫
(overrid)
或者改變它的行為。假設,你可以修改
list
類,使其可以在乙個
item
被新增或者被移除的時候記錄一些額外的資料。但是
list
不允許客戶重寫它的新增和移除
item
的方法。因此,雖然
list
可能是你最喜歡的類之一,但是它不能被作為自定義類的基類。相反,
collection
可以充當這一角色。雖然他並沒有
list
的所有能力,但是它公開了一系列關鍵的保護成員,你可以自由的重寫。
在system.collections.generic
命名空間中所包含的集合,實現了一系列不同的介面,這些介面為管理集合、與集合互動提供了不同層次的支援。在自己的
api中,應該根據需要選擇最合適的介面。一條從經驗中得來的規則就是,在自己的
api中使用最小的限定介面。如,如果希望在集合中依次迭代集合中的
item
,僅僅需要實現
ienumerable
介面。
system.collections.generic
命名空間包含了
ienumerable
介面。該介面為迭代集合中的元素提供了乙個標準的機制。在框架中,它的角色比其他基於集合的介面更顯著。
foreach
提供了乙個簡潔的、可讀性強的途徑來訪問集合中的所有元素
(item)
。因此,在自己的泛型中最好實現對
foreach
的支援。
C 泛型程式設計指導原則 六 七
對於該問題,有兩大基本陣營。一方認為 單個字母 的型別引數名稱更好,因為它減少了泛型宣告的簽名的大小,這是被大多數 c 模板庫所使用的模式。另一方認為乙個字母過於簡短,不足以表達型別引數的本質意義,他們希望用長一點的 更具有表述性的名字。用中國話最好來解釋了 具體問題具體分析,在兩種方法之間折中處理...
C 泛型程式設計指導原則 17 18
當使用約束的時候,可以選擇對任何乙個型別引數使用多重約束。事實上,你可以將單獨的類約束與多重介面約束聯合使用。當你開始混合並匹配多重約束的時候,可能引入含糊不清的約束。如 public inte ce i public class c public class testclasswhere t c,...
c 泛型程式設計
對於兩個不同的概念a和b,如果概念a所需求的所有功能也是概念b所需求的功能,那麼就說概念b是概念a的子概念。例如 標準模板庫 standard template library,簡稱stl 提供了一些非常常用的資料結構和演算法 將函式物件作為演算法的引數而不是將函式所執行的運算作為演算法的一部分。使...