新聞中心
C# 泛型類封裝不是特定于具體數(shù)據(jù)類型的操作。泛型類最常用于集合,如鏈接列表、哈希表、堆棧、隊(duì)列、樹等,其中,像從集合中添加和移除項(xiàng)這樣的操作都以大體上相同的方式執(zhí)行,與所存儲數(shù)據(jù)的類型無關(guān)。對于大多數(shù)需要集合類的方案,推薦的方法是使用 .NET Framework 2.0 類庫中所提供的類。一般情況下,創(chuàng)建泛型類的過程為:從一個現(xiàn)有的具體類開始,逐一將每個類型更改為類型參數(shù),直至達(dá)到通用化和可用性的***平衡。創(chuàng)建您自己的泛型類時,需要特別注意以下事項(xiàng):

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),鐵嶺網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:鐵嶺等地區(qū)。鐵嶺做網(wǎng)站價格咨詢:18982081108
將哪些類型通用化為類型參數(shù)。一般規(guī)則是,能夠參數(shù)化的類型越多,代碼就會變得越靈活,重用性就越好。但是,太多的通用化會使其他開發(fā)人員難以閱讀或理解代碼。如果存在約束,應(yīng)對類型參數(shù)應(yīng)用什么約束。一個有用的規(guī)則是,應(yīng)用盡可能最多的約束,但仍使您能夠處理需要處理的類型。例如,如果您知道您的泛型類僅用于引用類型,則應(yīng)用類約束。這可以防止您的類被意外地用于值類型,并允許您對 T 使用 as 運(yùn)算符以及檢查空值。 是否將泛型行為分解為基類和子類。由于泛型類可以作為基類使用,此處適用的設(shè)計(jì)注意事項(xiàng)與非泛型類相同。有關(guān)從泛型基類繼承的規(guī)則,請參見下面的內(nèi)容。是否實(shí)現(xiàn)一個或多個泛型接口。
例如,如果您設(shè)計(jì)一個類,該類將用于創(chuàng)建基于泛型的集合中的項(xiàng),則可能需要實(shí)現(xiàn)一個接口,如 IComparable
類型參數(shù)和約束的規(guī)則對于泛型類行為有幾方面的含義,特別是關(guān)于繼承和成員可訪問性。請務(wù)必先理解一些術(shù)語,然后再繼續(xù)進(jìn)行。對于泛型類 Node
C# 泛型類代碼
- class BaseNode { }
- class BaseNodeGeneric
{ } - // concrete type
- class NodeConcrete
: BaseNode { } - //closed constructed type
- class NodeClosed
: BaseNodeGeneric { } - //open constructed type
- class NodeOpen
: BaseNodeGeneric { }
非泛型(具體)類可以從封閉式構(gòu)造基類繼承,但無法從開放式構(gòu)造類或裸類型參數(shù)繼承,因?yàn)樵谶\(yùn)行時客戶端代碼無法提供實(shí)例化基類所需的類型變量。
C# 泛型類代碼
- //No error
- class Node1 : BaseNodeGeneric
{ } - //Generates an error
- //class Node2 : BaseNodeGeneric
{} - //Generates an error
- //class Node3 : T {}
從開放式構(gòu)造類型繼承的泛型類必須為任何未被繼承類共享的基類類型參數(shù)提供類型變量,如以下代碼所示:
C# 泛型類代碼
- class BaseNodeMultiple
{ } - //No error
- class Node4
: BaseNodeMultiple { } - //No error
- class Node5
: BaseNodeMultiple { } - //Generates an error
- //class Node6
: BaseNodeMultiple {}
從開放式構(gòu)造類型繼承的泛型類必須指定約束,這些約束是基類型約束的超集或暗示基類型約束:
C# 泛型類代碼
- class NodeItem
where T : System.IComparable , new() { } - class SpecialNodeItem
: - NodeItem
where T : System.IComparable , new() { }
泛型類型可以使用多個類型參數(shù)和約束,如下所示:
C# 泛型類代碼
- class SuperKeyType
- where U : System.IComparable
- where V : new()
- { }
開放式構(gòu)造類型和封閉式構(gòu)造類型可以用作方法參數(shù):
C# 泛型類代碼
- void Swap
(List list1, List list2) - {
- //code to swap items
- }
- void Swap(List
list1, List list2) - {
- //code to swap items
- }
泛型類是不變的。也就是說,如果輸入?yún)?shù)指定 List
C# 泛型類的相關(guān)內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習(xí)C# 泛型類有所幫助。
【編輯推薦】
- C# 泛型應(yīng)用及優(yōu)點(diǎn)淺析
- 淺析C# 泛型約束中的一般約束
- C# 泛型約束之派生約束淺析
- 淺析C# 泛型約束中的構(gòu)造函數(shù)約束
- C# 強(qiáng)制類型轉(zhuǎn)換與C# 泛型淺析
當(dāng)前文章:C# 泛型類概念與實(shí)例的理解應(yīng)用淺析
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/cdidhge.html


咨詢
建站咨詢
