精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C# 泛型接口應用淺析

開發 后端
C# 泛型接口的概念是什么?C# 泛型接口的使用是如何進行的呢?那么本文就向你詳細C# 泛型接口的內容。

C# 泛型接口的實用性:為泛型集合類或表示集合中項的泛型類定義接口通常很有用。對于泛型類,使用泛型接口十分可取,例如使用 IComparable﹤T﹥ 而不使用 IComparable,這樣可以避免值類型的裝箱和取消裝箱操作。.NET Framework 2.0 類庫定義了若干新的泛型接口,以用于 System.Collections.Generic 命名空間中新的集合類。將接口指定為類型參數的約束時,只能使用實現此接口的類型。下面的代碼示例顯示從 GenericList﹤T﹥ 類派生的 SortedList﹤T﹥ 類。SortedList﹤T﹥ 添加了約束 where T : IComparable﹤T﹥。這將使 SortedList﹤T﹥ 中的 BubbleSort 方法能夠對列表元素使用泛型 CompareTo 方法。在此示例中,列表元素為簡單類,即實現 IComparable﹤Person﹥ 的 Person。

C# 泛型接口代碼

  1. //Type parameter T in angle brackets.  
  2. public class GenericList﹤T﹥ :  
  3.  System.Collections.Generic.IEnumerable﹤T﹥  
  4. {  
  5. protected Node head;  
  6. protected Node current = null;  
  7.  
  8. // Nested class is also generic on T  
  9. protected class Node  
  10. {  
  11. public Node next;  
  12. private T data;  //T as private member datatype  
  13.  
  14. public Node(T t)  //T used in non-generic constructor  
  15. {  
  16. next = null;  
  17. data = t;  
  18. }  
  19.  
  20. public Node Next  
  21. {  
  22. get { return next; }  
  23. set { next = value; }  
  24. }  
  25.  
  26. public T Data  //T as return type of property  
  27. {  
  28. get { return data; }  
  29. set { data = value; }  
  30. }  
  31. }  
  32.  
  33. public GenericList()  //constructor  
  34. {  
  35. head = null;  
  36. }  
  37.  
  38. public void AddHead(T t)  //T as method parameter type  
  39. {  
  40. Node n = new Node(t);  
  41. n.Next = head;  
  42. head = n;  
  43. }  
  44.  
  45. // Implementation of the iterator  
  46. public System.Collections.Generic.IEnumerator﹤T﹥ GetEnumerator()  
  47. {  
  48. Node current = head;  
  49. while (current != null)  
  50. {  
  51. yield return current.Data;  
  52. current = current.Next;  
  53. }  
  54. }  
  55.  
  56. // IEnumerable﹤T﹥ inherits from IEnumerable, therefore this class   
  57. // must implement both the generic and non-generic versions of   
  58. // GetEnumerator. In most cases, the non-generic method can   
  59. // simply call the generic method.  
  60. System.Collections.IEnumerator   
  61. System.Collections.IEnumerable.GetEnumerator()  
  62. {  
  63. return GetEnumerator();  
  64. }  
  65. }  
  66.  
  67. public class SortedList﹤T﹥ :  
  68.  GenericList﹤T﹥ where T : System.IComparable﹤T﹥  
  69. {  
  70. // A simple, unoptimized sort algorithm that   
  71. // orders list elements from lowest to highest:  
  72.  
  73. public void BubbleSort()  
  74. {  
  75. if (null == head || null == head.Next)  
  76. {  
  77. return;  
  78. }  
  79. bool swapped;  
  80.  
  81. do 
  82. {  
  83. Node previous = null;  
  84. Node current = head;  
  85. swapped = false;  
  86.  
  87. while (current.next != null)  
  88. {  
  89. //  Because we need to call this method, the SortedList  
  90. //  class is constrained on IEnumerable﹤T﹥  
  91. if (current.Data.CompareTo(current.next.Data) ﹥ 0)  
  92. {  
  93. Node tmp = current.next;  
  94. current.next = current.next.next;  
  95. tmp.next = current;  
  96.  
  97. if (previous == null)  
  98. {  
  99. head = tmp;  
  100. }  
  101. else 
  102. {  
  103. previous.next = tmp;  
  104. }  
  105. previous = tmp;  
  106. swapped = true;  
  107. }  
  108. else 
  109. {  
  110. previous = current;  
  111. current = current.next;  
  112. }  
  113. }  
  114. while (swapped);  
  115. }  
  116. }  
  117.  
  118. // A simple class that implements   
  119. //IComparable﹤T﹥ using itself as the   
  120. // type argument. This is a common  
  121. // design pattern in objects that   
  122. // are stored in generic lists.  
  123. public class Person : System.IComparable﹤Person﹥  
  124. {  
  125. string name;  
  126. int age;  
  127.  
  128. public Person(string s, int i)  
  129. {  
  130. name = s;  
  131. age = i;  
  132. }  
  133.  
  134. // This will cause list elements  
  135. // to be sorted on age values.  
  136. public int CompareTo(Person p)  
  137. {  
  138. return age - p.age;  
  139. }  
  140.  
  141. public override string ToString()  
  142. {  
  143. return name + ":" + age;  
  144. }  
  145.  
  146. // Must implement Equals.  
  147. public bool Equals(Person p)  
  148. {  
  149. return (this.age == p.age);  
  150. }  
  151. }  
  152.  
  153. class Program  
  154. {  
  155. static void Main()  
  156. {  
  157. //Declare and instantiate a new generic SortedList class.  
  158. //Person is the type argument.  
  159. SortedList﹤Person﹥ list = new SortedList﹤Person﹥();  
  160.  
  161. //Create name and age values to initialize Person objects.  
  162. string[] names = new string[]   
  163. {   
  164. "Franscoise",   
  165. "Bill",   
  166. "Li",   
  167. "Sandra",   
  168. "Gunnar",   
  169. "Alok",   
  170. "Hiroyuki",   
  171. "Maria",   
  172. "Alessandro",   
  173. "Raul"   
  174. };  
  175.  
  176. int[] ages = new int[] { 45, 19, 28,  
  177.  23, 18, 9, 108, 72, 30, 35 };  
  178.  
  179. //Populate the list.  
  180. for (int x = 0; x ﹤ 10; x++)  
  181. {  
  182. list.AddHead(new Person(names[x], ages[x]));  
  183. }  
  184.  
  185. //Print out unsorted list.  
  186. foreach (Person p in list)  
  187. {  
  188. System.Console.WriteLine(p.ToString());  
  189. }  
  190. System.Console.WriteLine("Done with unsorted list");  
  191.  
  192. //Sort the list.  
  193. list.BubbleSort();  
  194.  
  195. //Print out sorted list.  
  196. foreach (Person p in list)  
  197. {  
  198. System.Console.WriteLine(p.ToString());  
  199. }  
  200. System.Console.WriteLine("Done with sorted list");  
  201. }  

可將多重接口指定為單個類型上的約束,如下所示:

C# 泛型接口代碼

  1. class Stack﹤T﹥ where T : System.IComparable﹤T﹥, IEnumerable﹤T﹥  
  2. {  

一個接口可定義多個類型參數,如下所示:

C# 泛型接口代碼

  1. interface IDictionary﹤K, V﹥  
  2. {  

類之間的繼承規則同樣適用于接口:

C# 泛型接口代碼

  1. interface IMonth﹤T﹥ { }  
  2.  
  3. interface IJanuary : IMonth﹤int﹥ { }  //No error  
  4. interface IFebruary﹤T﹥ : IMonth﹤int﹥ { }  //No error  
  5. interface IMarch﹤T﹥: IMonth﹤T﹥ { }//No error  
  6. //interface IApril﹤T﹥  : IMonth﹤T, U﹥ {}  //Error 

如果泛型接口為逆變的,即僅使用其類型參數作為返回值,則此泛型接口可以從非泛型接口繼承。在 .NET Framework 類庫中,IEnumerable﹤T﹥ 從 IEnumerable 繼承,因為 IEnumerable﹤T﹥ 僅在 GetEnumerator 的返回值和當前屬性 getter 中使用 T。

具體類可以實現已關閉的構造接口,如下所示:

C# 泛型接口代碼

  1. interface IBaseInterface﹤T﹥ { }  
  2.  
  3. class SampleClass : IBaseInterface﹤string﹥ { } 

只要類參數列表提供了接口必需的所有參數,泛型類便可以實現泛型接口或已關閉的構造接口,如下所示:

C# 泛型接口代碼

  1. interface IBaseInterface1﹤T﹥ { }  
  2. interface IBaseInterface2﹤T, U﹥ { }  
  3.  
  4. class SampleClass1﹤T﹥ :   
  5. IBaseInterface1﹤T﹥ { }//No error  
  6. class SampleClass2﹤T﹥ :   
  7. IBaseInterface2﹤T, string﹥ { }//No error 

對于泛型類、泛型結構或泛型接口中的方法,控制方法重載的規則相同。

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

【編輯推薦】

  1. C# 強制類型轉換與C# 泛型淺析
  2. C# 泛型類概念與實例的理解應用淺析
  3. C# 泛型的優點淺談
  4. C# 泛型類型參數淺析
  5. C# 類型參數約束分析及應用淺析
責任編輯:仲衡 來源: MSDN
相關推薦

2009-08-24 17:27:05

C#泛型應用

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 16:39:19

C# 泛型應用

2009-08-24 11:35:20

C# 泛型應用

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 14:20:13

C# 強制類型轉換

2009-08-07 08:53:52

C# ICloneab

2009-08-24 14:26:42

C# 泛型類

2009-08-24 10:37:27

C# 泛型

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 10:07:57

C#泛型處理

2009-08-24 16:19:42

C# 泛型方法

2009-08-24 16:01:44

C# 泛型

2009-08-24 13:41:23

C# 泛型約束

2009-08-27 13:05:06

C#接口特點C#接口實例

2009-08-31 16:37:20

C#接口定義
點贊
收藏

51CTO技術棧公眾號

成人aa视频在线观看| 亚洲中无吗在线| 色婷婷综合久色| 亚洲成人第一| www.亚洲天堂.com| 亚洲影音一区| 欧美成人精品在线播放| 男人网站在线观看| 国内欧美日韩| 午夜精品一区二区三区电影天堂| 色一情一乱一伦一区二区三区丨| 成 人 黄 色 小说网站 s色| 色呦呦在线免费观看| 91麻豆免费在线观看| 91最新在线免费观看| 日韩色图在线观看| 国内精品久久久久久久影视麻豆| 亚洲乱码国产乱码精品精| 超碰在线免费av| 欧美一级大片| 亚洲福利电影网| 亚洲精品日韩av| 久久99精品波多结衣一区| 91精品国产自产拍在线观看蜜| 天堂成人国产精品一区| 欧日韩在线视频| 在线视频一二三区| 亚洲一区二区三区色| 国产在线观看你懂的| 欧美日韩国产一区二区三区不卡| 精品久久国产老人久久综合| 日本久久久久久久久久久久| sm久久捆绑调教精品一区| 国产精品久久久久久久午夜片| 国产综合色一区二区三区| 国产精品国产三级国产普通话对白| 亚洲午夜电影| 精品国产一区二区三区久久| 黄色三级生活片| 欧美日本成人| 欧美色播在线播放| 青青草综合在线| 看黄网站在线观看| 国产精品女主播在线观看| 欧美一区二区三区精美影视| 天天干视频在线观看| 午夜亚洲一区| 91精品国产高清自在线 | 国产成人日日夜夜| 成人久久一区二区三区| 亚洲视频在线观看一区二区 | 亚洲一区二区av在线| 日日噜噜噜夜夜爽爽| 婷婷在线视频| 国产精品一品视频| 成人一区二区电影| 国产免费高清视频| 韩国一区二区三区| 91精品国产高清自在线| 日韩精品视频播放| 亚久久调教视频| 国产精品96久久久久久又黄又硬 | 678五月天丁香亚洲综合网| 在线观看的毛片| 欧美综合影院| 日韩一区二区视频| 中文字幕在线观看91| 老司机aⅴ在线精品导航 | 午夜视频在线观看国产| 精品国内亚洲2022精品成人| 日韩电影中文字幕| 日本少妇xxxxx| 欧美成免费一区二区视频| 久久精品中文字幕电影| 欧美精品一区二区成人| 亚洲国产高清一区| 日韩av片免费在线观看| 依依成人在线视频| 国产精品亚洲一区二区三区在线| 国产精品区一区二区三在线播放| 一本一道无码中文字幕精品热| 午夜在线精品| 国产精品日韩在线一区| 国产男男gay体育生白袜| 丁香婷婷综合网| 欧美日韩三区四区| 成人久久精品人妻一区二区三区| www.亚洲色图| 神马影院我不卡| 在线heyzo| 一本大道久久a久久综合婷婷| 一区二区免费av| 国产精品一区二区三区美女| 中文字幕久精品免费视频| 欧美爱爱小视频| 免费亚洲网站| 亚洲最大的免费| 特一级黄色大片| 日韩黄色免费电影| 97超碰人人看人人| 国产资源在线观看| 亚洲精品va在线观看| 亚洲成人精品电影在线观看| 欧美人与动牲性行为| 欧美性猛交xxxx乱大交极品| 成人不卡免费视频| 天天做夜夜做人人爱精品| 精品国产一区二区三区久久狼5月| 久久久久黄色片| 蜜臀精品一区二区三区在线观看| 国产一区二区精品免费| 亚洲s色大片| 欧美三级欧美成人高清www| 久久久久亚洲av无码麻豆| 亚洲警察之高压线| 欧美激情亚洲自拍| 91国内精品视频| 26uuu国产一区二区三区| 97超碰国产精品| 亚洲国产91视频| 亚洲天堂一区二区三区| 久草手机在线观看| 国产v综合v亚洲欧| 经典三级在线视频| 欧美成人一二区| 亚洲最新在线视频| 青青草免费观看视频| 国产91丝袜在线观看| 懂色av粉嫩av蜜臀av| 992tv国产精品成人影院| 日韩精品在线视频| 国产亚洲精品女人久久久久久| 精品一区二区三区免费视频| 成人日韩在线电影| 岛国视频免费在线观看| 欧美日韩性视频| 黄色国产小视频| 私拍精品福利视频在线一区| 欧美黑人国产人伦爽爽爽| 国产又粗又猛又爽又黄的| 中文字幕av资源一区| 一本色道无码道dvd在线观看| 欧美顶级毛片在线播放| 韩国一区二区电影| 日韩在线视频免费| 婷婷国产v国产偷v亚洲高清| 中国特级黄色大片| 亚洲国产婷婷| 精品国产福利| 小草在线视频免费播放| 精品视频—区二区三区免费| 天天综合网入口| 久久日韩精品一区二区五区| 久久久久久久久久久久久国产精品 | 久久在线观看免费| 欧美aⅴ在线观看| 国产一区二区区别| 国产成人精品av| 超碰97在线免费观看| 欧美日韩一区二区在线观看视频 | 国产ts人妖一区二区三区| 色天堂在线视频| 色婷婷一区二区| 国产破处视频在线观看| 激情图片小说一区| 国产精品av免费观看| 久久久久影视| 国产精品久久久久久一区二区| 最新97超碰在线| 亚洲激情图片小说视频| 好吊操视频这里只有精品| 国产精品日韩| 亚洲欧美日韩综合一区| 欧美第一在线视频| 中文字幕亚洲色图| 国产精品老熟女视频一区二区| 亚洲视频精选在线| 在线精品视频播放| 日韩黄色免费网站| 国产91在线亚洲| 欧美精品国产白浆久久久久| 国产精品久久久久99| 国产在线观看av| 日韩精品黄色网| 亚洲无码精品国产| 亚洲一区二区高清| 91麻豆制片厂| 国产suv精品一区二区883| 日韩欧美国产免费| 四季av一区二区凹凸精品| 国产精品香蕉视屏| 成人亚洲免费| 97免费中文视频在线观看| 国产黄色在线播放| 精品国产3级a| 天堂网免费视频| 夜夜精品视频一区二区| 国产精品国产三级国产专业不 | 欧美吞精做爰啪啪高潮| 青青青在线免费观看| 久久婷婷久久一区二区三区| 老司机av网站| 久热成人在线视频| 欧美三级一级片| 综合天堂av久久久久久久| 欧美婷婷久久| jizz性欧美23| 久久久久久成人精品| 91在线导航| 日韩高清人体午夜| av免费观看网址| 欧美日韩精品三区| 9i精品福利一区二区三区| 亚洲综合一区二区| 精品在线观看一区| 久久精品一级爱片| 欧美图片一区二区| 成人av资源在线| 欧美色图校园春色| 天堂中文av在线资源库| 欧美视频二区欧美影视| 精品在线91| 在线观看国产精品入口| 免费高清成人在线| 久久露脸国产精品| 日本激情视频在线观看| 亚洲男人天堂2024| 色综合久久久久久| 精品福利一二区| 国产男女裸体做爰爽爽| 欧美色男人天堂| 青娱乐在线免费视频| 欧美午夜精品久久久久久人妖 | 久久久www免费人成精品| 日韩女优在线视频| 成人毛片在线观看| 性xxxxxxxxx| 国产xxx精品视频大全| 深夜做爰性大片蜜桃| 韩国三级在线一区| 日韩欧美亚洲另类| 国产在线不卡一区| 亚洲图片 自拍偷拍| 韩国毛片一区二区三区| av亚洲天堂网| 激情文学综合丁香| 黄页网站在线看| 国产经典欧美精品| 性生交大片免费看l| 不卡一区二区在线| 欧美亚一区二区三区| 国产午夜精品在线观看| 无码人妻aⅴ一区二区三区69岛| 久久精品视频在线免费观看 | 亚洲色大成网站www久久九九| 国产探花在线视频| 亚洲另类色综合网站| 免费在线一级片| 性欧美大战久久久久久久久| 天天操中文字幕| 在线观看免费视频综合| 在线视频 91| 精品三级在线观看| 欧美日韩伦理片| 中文字幕在线日韩 | 亚洲精品日产精品乱码不卡| 青娱乐国产在线视频| 偷窥少妇高潮呻吟av久久免费| 国产情侣自拍av| 欧美性极品少妇| 国产www免费观看| 亚洲福利在线视频| 国产区视频在线| 久久国产精品久久久久久| 狂野欧美性猛交xxxxx视频| 欧美最顶级丰满的aⅴ艳星| 亚洲成人av观看| 91久久久一线二线三线品牌| 欧美日韩一本| 午夜精品福利一区二区| 欧美日韩综合| 久久久久久香蕉| 国产不卡在线视频| 亚洲黄色免费视频| 有坂深雪av一区二区精品| wwwwww国产| 制服.丝袜.亚洲.另类.中文 | 日韩中文在线视频| 亚洲精品国产精品乱码视色| 欧美日韩电影一区| 天天干天天操av| 久久精品国产69国产精品亚洲| 黑人玩欧美人三根一起进| 国产精品高清在线| **爰片久久毛片| 日韩免费av电影| 国产99久久| av电影一区二区三区| 亚洲一区欧美激情| 中文字幕第六页| 国产午夜精品理论片a级大结局| 日本a级片视频| 在线视频一区二区三区| 欧日韩在线视频| 欧美成人午夜视频| 久久91导航| 国产在线观看一区| 91精品一区二区三区综合| 99热成人精品热久久66| 成人福利电影精品一区二区在线观看| 农村老熟妇乱子伦视频| 精品久久久视频| 亚洲成人精品女人久久久| 中文字幕亚洲第一| 亚洲一区二区三区四区| 久久精品女人的天堂av| 好看的av在线不卡观看| 天堂网在线免费观看| 久久综合九色欧美综合狠狠| 久久国产免费观看| 欧美美女一区二区| 一区二区三区视频在线观看视频| 国内精品久久久久久| 国产麻豆精品| 综合色婷婷一区二区亚洲欧美国产| 久久精品观看| 国产精品无码久久久久久| 亚洲在线一区二区三区| 精品国产亚洲一区二区麻豆| 色av吧综合网| 久久电影天堂| 在线国产精品网| 美女任你摸久久 | 亚洲欧美一区二区视频| 中文天堂在线视频| 在线播放精品一区二区三区| 日韩在线影院| 欧美午夜视频在线| 久久中文精品| 亚洲国产天堂av| 欧美天天综合网| 最新av网站在线观看 | 成人免费观看毛片| 国产亚洲一区二区三区| 中文字幕手机在线视频| 亚洲天堂成人在线视频| 奇米777日韩| 亚洲精品乱码视频| 另类小说一区二区三区| 国产美女高潮视频| 欧美一卡二卡三卡四卡| 中文字幕在线三区| 俄罗斯精品一区二区| 欧美日韩直播| 精品中文字幕av| 久久久久久久免费视频了| 无码人妻av免费一区二区三区| 国产亚洲在线播放| 99精品国产九九国产精品| 日韩亚洲欧美一区二区| 成人福利电影精品一区二区在线观看| 国产午夜视频在线播放| 中文字幕一区在线| 日韩国产高清一区| 亚洲AV无码精品国产| 久久99久久久久久久久久久| 992tv人人草| 亚洲精品大片www| 婷婷伊人综合中文字幕| 欧美影院在线播放| 9999国产精品| 在线观看一区二区三区四区| 婷婷综合另类小说色区| 欧美卡一卡二卡三| 欧美性猛交xxxx富婆弯腰| a天堂中文在线88| 亚洲最大福利视频| 亚洲视频www| 亚洲一级理论片| 亚洲精品一区二区三区四区高清| 欧美性suv| 91麻豆天美传媒在线| 337p粉嫩大胆色噜噜噜噜亚洲| 中文资源在线播放| 欧美交受高潮1| 成人中文在线| 日本美女视频网站| 欧美日韩中文字幕一区| 538在线精品| 亚洲第一在线综合在线| 不卡电影一区二区三区| 中文字幕在线网址| 69影院欧美专区视频| 欧美gvvideo网站| 日本高清www| 日韩欧美电影一区| av在线不卡精品| 青青草精品视频在线| 亚久久调教视频| 99视频只有精品|