C 泛型程式設計指導原則 17 18

2021-04-13 09:24:26 字數 583 閱讀 2334

當使用約束的時候,可以選擇對任何乙個型別引數使用多重約束。事實上,你可以將單獨的類約束與多重介面約束聯合使用。當你開始混合並匹配多重約束的時候,可能引入含糊不清的約束。 如:

public inte***ce i

public class c

}

public class testclasswhere t : c, i

這裡介面i和類

c中的foo1

產生了混淆。

無論何時,當你引入自定義型別的時候,都需要考慮當他們被用作型別引數的時候會產生什麼樣的行為。顯然,你選擇實現的介面會在該型別如何被約束方面起關鍵性的作用。至少,準備用為型別引數的每個型別都應該包含對引數構造的支援。通過支援這個約束,使得你的型別可以被任何包含構造約束的泛型型別所支援。

通過支援無引數的構造器來增加你的介面的價值的例項足夠多,不過是對於泛型還是非泛型解決方案。如果你曾經和工廠模式的任何一種變形打過交道,你可能已經提供過無參構造器。有了泛型,該條款可以增加價值的場景的列表只會變得更長。

例如:public ienumerablegetdataobjects() where t : new() {}

C 泛型程式設計指導原則 六 七

對於該問題,有兩大基本陣營。一方認為 單個字母 的型別引數名稱更好,因為它減少了泛型宣告的簽名的大小,這是被大多數 c 模板庫所使用的模式。另一方認為乙個字母過於簡短,不足以表達型別引數的本質意義,他們希望用長一點的 更具有表述性的名字。用中國話最好來解釋了 具體問題具體分析,在兩種方法之間折中處理...

C 泛型程式設計指導原則 12 14

在一些時候,你很希望引入自己定義的泛型集合。典型來講,自定義的泛型集合都應該由現有的來 collection 擴充套件。這樣就可以繼承它的行為,並且可以根據自己特定的需要來補充或者修改其功能。在這些情況下,你可能嘗試使自定義泛型集合擴充套件自 list list 毫無爭議的是 system.coll...

c 泛型程式設計

對於兩個不同的概念a和b,如果概念a所需求的所有功能也是概念b所需求的功能,那麼就說概念b是概念a的子概念。例如 標準模板庫 standard template library,簡稱stl 提供了一些非常常用的資料結構和演算法 將函式物件作為演算法的引數而不是將函式所執行的運算作為演算法的一部分。使...