a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

關于C#泛型

2023-05-20 20:23:40
字體:
來源:轉載
供稿:網友

C#提供了一個非常方便的東西——泛型,那么什么是泛型,泛型有哪些好處,如何使用泛型?下面就做一個詳細的介紹:

1、什么是泛型?

通過泛型可以定義類型安全類,而不會損害類型安全、性能或工作效率

2、實例化泛型

(1)可以使用任何類型來聲明和實例化

(2)申明和實例話都必須用一個特定的類型來代替一般類型T

(3)舉例說明:

//原來寫法
Public class Stack
{
     object[] m_Items; 
     public void Push(object item) 
     {...} 
     public object Pop() 
     {...}
}
Stack stack = new Stack();
stack.Push(1);
int number = (int)stack.Pop();

//有了泛型后
Public class Stack <T>

     T[] m_Items; 
     public void Push(T item) 
     {...} 
     public T Pop() 
     {...}
}
Stack <int> stack = new Stack <int> ();
stack.Push(1);
int number = (int)stack.Pop();

3、泛型的好處

(1)一次性的開發、測試和部署代碼,通過任何類型來重用它

(2)編譯器支持和類型安全

(3)不會強行對值類型進行裝箱和取消裝箱,或者對引用類型進行向下強制類型轉換,所以性能得到顯著提高。

 注:值類型大概可以提高200%,引用類型大概為100%

4、多個泛型

單個類型可以定義多個泛型

5、泛型別名

(1)在文件頭部使用using 為特定類型取別名,別名作用范圍是整個文件

(2)舉例說明

using List = LinkedList <int,string> ;
class ListClient

     static void Main(string[] args) 
     { 
          List list = new List(); 
          list.AddHead(123, "AAA "); 
     }
}

6、泛型約束

A 派生約束

如:

public class LinkedList <K,T> where K:IComparable
{
T Find(K key)
{
if (str.Key.CompareTo(key) == 0)//只有實現這個接口才可比較
}
}

注意:

(1)所有的派生約束必須放在類的實際派生列表之后

如:public class LinkedList <K,T> :IEnumerable <T> where K:IComparable <K> {...}

(2)一個泛型參數上可以約束多個接口(用逗號分隔)

public class LinkedList <K,T> where K:IComparable <K> ,IConvertible

(3)在一個約束中最多只能使用一個基類

(4)約束的基類不能是密封類或靜態類

(5)不能將System.Delegate或System.Array約束為基類

(6)可以同時約束一個基類以及一個或多個接口,但是該基類必須首先出現在派生約束列表中。

(7)C#允許你將另一個泛型參數指定為約束

public class MyClass <T,U> where T:U
        {...}

(8)可以自己定義基類或接口進行泛型約束

(9)自定義的接口或基類必須與泛型具有一致的可見性

B構造函數約束

如:

class Node <K,T> where T:new()
       {
      }

注意:

可以將構造函數的約束和派生約束結合起來,前提是構造函數的約束出現在約束列表中的最后

C引用/值類型約束

(1)可以使用struct約束將泛型參數約束為值類型(如int、bool、enum),或任何自定義結構

(2)同樣可以使用class約束將泛型參數約束為引用類型

(3)不能將引用/值類型約束與基類約束一起使用,因為基類約束涉及到類

(4)不能使用結構和默認構造函數約束,因為默認構造函數約束也涉及到類

(5)雖然您可以使用類和默認構造函數約束,但是這樣做沒有任何價值

(6)可以將引用/值類型約束與接口約束組合起來,前提是引用/值類型約束出現在約束列表的開頭

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久免费大片 | 久久成人在线 | 精品国产一区二区三区四区 | 欧美二区在线观看 | 蜜臀av性久久久久av蜜臀妖精 | 成人久久18免费观看 | 精品国产三级 | 日韩电影免费在线观看中文字幕 | 毛片一区二区三区 | av一区二区在线观看 | 国产极品视频在线观看 | 久久97 | 日日摸日日爽 | 国产精品日本一区二区不卡视频 | 91久久精品一区二区别 | 久久久久免费 | 欧美久久久| 久久99国产精一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 亚洲午夜精品一区二区三区 | 青青青国产精品一区二区 | 欧美在线视频一区二区 | 亚洲一区二区三区日韩 | 一区二区三区亚洲视频 | 欧美www. | 亚洲精品中文字幕 | 国产偷录视频叫床高潮对白 | 精品国产麻豆 | 日一日干一干 | 中文字幕不卡在线88 | 国产精品久久久久国产a级 日韩在线二区 | 国产欧美日韩综合 | 日韩一区欧美 | 久久精品国产99久久久 | 成人免费视频一区二区三区 | 日韩视频免费在线 | 在线日韩 | 亚洲成人一区二区 | 日韩精品区 | 在线视频 中文字幕 | 久久久精品国产 |