成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 泛型類概念與實例的理解應用淺析

開發 后端
C# 泛型類封裝不是特定于具體數據類型的操作。C# 泛型類最常用于集合,如鏈接列表、哈希表、堆棧、隊列、樹等。那么本文就向你詳細介紹C# 泛型類的內容。

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

將哪些類型通用化為類型參數。一般規則是,能夠參數化的類型越多,代碼就會變得越靈活,重用性就越好。但是,太多的通用化會使其他開發人員難以閱讀或理解代碼。如果存在約束,應對類型參數應用什么約束。一個有用的規則是,應用盡可能最多的約束,但仍使您能夠處理需要處理的類型。例如,如果您知道您的泛型類僅用于引用類型,則應用類約束。這可以防止您的類被意外地用于值類型,并允許您對 T 使用 as 運算符以及檢查空值。 是否將泛型行為分解為基類和子類。由于泛型類可以作為基類使用,此處適用的設計注意事項與非泛型類相同。有關從泛型基類繼承的規則,請參見下面的內容。是否實現一個或多個泛型接口。

例如,如果您設計一個類,該類將用于創建基于泛型的集合中的項,則可能需要實現一個接口,如 IComparable<T>,其中 T 是您的類的類型。

類型參數和約束的規則對于泛型類行為有幾方面的含義,特別是關于繼承和成員可訪問性。請務必先理解一些術語,然后再繼續進行。對于泛型類 Node<T>,,客戶端代碼可以通過指定類型參數引用該類,以創建封閉式構造類型 (Node<int>),或者可以讓類型參數處于未指定狀態(例如在指定泛型基類時)以創建開放式構造類型 (Node<T>)。泛型類可以從具體的、封閉式構造或開放式構造基類繼承:

C# 泛型類代碼

  1. class BaseNode { }  
  2. class BaseNodeGeneric<T> { }  
  3.  
  4. // concrete type  
  5. class NodeConcrete<T> : BaseNode { }  
  6.  
  7. //closed constructed type  
  8. class NodeClosed<T> : BaseNodeGeneric<int> { }  
  9.  
  10. //open constructed type   
  11. class NodeOpen<T> : BaseNodeGeneric<T> { } 

非泛型(具體)類可以從封閉式構造基類繼承,但無法從開放式構造類或裸類型參數繼承,因為在運行時客戶端代碼無法提供實例化基類所需的類型變量。

C# 泛型類代碼

  1. //No error  
  2. class Node1 : BaseNodeGeneric<int> { }  
  3.  
  4. //Generates an error  
  5. //class Node2 : BaseNodeGeneric<T> {}  
  6.  
  7. //Generates an error  
  8. //class Node3 : T {} 

從開放式構造類型繼承的泛型類必須為任何未被繼承類共享的基類類型參數提供類型變量,如以下代碼所示:

C# 泛型類代碼

  1. class BaseNodeMultiple<T, U> { }  
  2.  
  3. //No error  
  4. class Node4<T> : BaseNodeMultiple<T, int> { }  
  5.  
  6. //No error  
  7. class Node5<T, U> : BaseNodeMultiple<T, U> { }  
  8.  
  9. //Generates an error  
  10. //class Node6<T> : BaseNodeMultiple<T, U> {}  

從開放式構造類型繼承的泛型類必須指定約束,這些約束是基類型約束的超集或暗示基類型約束:

C# 泛型類代碼

  1. class NodeItem<T> where T : System.IComparable<T>, new() { }  
  2. class SpecialNodeItem<T> :   
  3. NodeItem<T> where T : System.IComparable<T>, new() { } 

泛型類型可以使用多個類型參數和約束,如下所示:

C# 泛型類代碼

  1. class SuperKeyType<K, V, U>  
  2.     where U : System.IComparable<U>  
  3.     where V : new()  
  4. { } 

開放式構造類型和封閉式構造類型可以用作方法參數:

C# 泛型類代碼

  1. void Swap<T>(List<T> list1, List<T> list2)  
  2. {  
  3.     //code to swap items  
  4. }  
  5.  
  6. void Swap(List<int> list1, List<int> list2)  
  7. {  
  8.     //code to swap items  

泛型類是不變的。也就是說,如果輸入參數指定 List<BaseClass>,則當您試圖提供 List<DerivedClass> 時,將會發生編譯時錯誤。

C# 泛型類的相關內容就向你介紹到這里,希望對你了解和學習C# 泛型類有所幫助。

【編輯推薦】

  1. C# 泛型應用及優點淺析
  2. 淺析C# 泛型約束中的一般約束
  3. C# 泛型約束之派生約束淺析
  4. 淺析C# 泛型約束中的構造函數約束
  5. C# 強制類型轉換與C# 泛型淺析
責任編輯:仲衡 來源: MSDN
相關推薦

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 10:37:27

C# 泛型

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 10:29:39

C# 泛型

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 16:39:19

C# 泛型應用

2009-08-24 17:27:05

C#泛型應用

2009-08-24 11:35:20

C# 泛型應用

2009-08-24 14:20:13

C# 強制類型轉換

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-27 17:11:44

C# Fluent I

2009-08-24 10:07:57

C#泛型處理

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-17 17:49:20

C# 枚舉

2009-08-24 16:01:44

C# 泛型

2009-08-24 13:31:38

C# 泛型約束

2009-09-11 11:16:53

C# Attribut

2009-08-24 18:22:05

C# 泛型編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品黑人 | 福利一区在线观看 | 亚洲 欧美 日韩 在线 | 国产不卡一 | 国产精品久久久久久吹潮日韩动画 | 欧美日韩久久久久 | 亚洲成人免费观看 | 国产精品女人久久久 | 免费在线观看黄网站 | 日韩超碰| 精品一区二区三区免费视频 | 视频一区二区在线观看 | 久久成人人人人精品欧 | 精品久久久久一区二区国产 | av黄色在线 | 自拍偷拍视频网 | 国产视频一区二区 | 国产精品久久精品 | 99热播精品| 国产一区 | 久久99精品久久久久蜜桃tv | 欧美a√ | 欧美一区2区三区3区公司 | 亚洲www啪成人一区二区麻豆 | 国产91久久精品一区二区 | 成年人视频在线免费观看 | 欧美日本一区二区 | 中文字幕不卡在线观看 | 少妇特黄a一区二区三区88av | 国产精品视频久久久 | 日韩在线不卡 | 成人免费观看男女羞羞视频 | 久久精品视频播放 | 成人av网站在线观看 | 男女激情网站免费 | 一区二区精品 | 全免费a级毛片免费看视频免 | 日韩伦理一区二区三区 | 久久久久九九九女人毛片 | 亚洲欧美中文日韩在线v日本 | 成人国产网站 |