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

淺析運行庫中的C# 泛型

開發 后端
運行庫中的C# 泛型主要向你介紹了第一次用值類型作為參數來構造泛型類型時,運行庫會創建專用泛型類型,將提供的參數代入到 MSIL 中的適當位置。對于每個用作參數的唯一值類型,都會創建一次專用泛型類型等等內容。

運行庫中的C# 泛型講的就是將C# 泛型類型或方法編譯為 Microsoft 中間語言 (MSIL) 時,它包含將其標識為具有類型參數的元數據。C# 泛型類型的 MSIL 的使用因所提供的類型參數是值類型還是引用類型而不同。***次用值類型作為參數來構造泛型類型時,運行庫會創建專用泛型類型,將提供的參數代入到 MSIL 中的適當位置。對于每個用作參數的***值類型,都會創建一次專用C# 泛型類型。

C# 泛型應用實例:

例如,假設您的程序代碼聲明了一個由整數構造的堆棧,如下所示:

  1. Stack<int> stack; 

在此位置,運行庫生成 Stack <T> 類的專用版本,并相應地用整數替換其參數。現在,只要程序代碼使用整數堆棧,運行庫就會重用生成的專用 Stack<T> 類。在下面的示例中,創建了整數堆棧的兩個實例,它們共享 Stack<int> 代碼的單個實例:

  1. Stack<int> stackOne = new Stack<int>();  
  2. Stack<int> stackTwo = new Stack<int>(); 

但是,如果在程序代碼中的其他位置創建了另一個 Stack<T> 類,這次使用不同的值類型(如 long 或用戶定義的結構)作為其參數,則運行庫會生成泛型類型的另一版本(這次將在 MSIL 中的適當位置代入 long)。由于每個專用泛型類本身就包含值類型,因此不再需要轉換。

對于引用類型,C# 泛型的工作方式略有不同。***次使用任何引用類型構造泛型類型時,運行庫會創建專用泛型類型,用對象引用替換 MSIL 中的參數。然后,每次使用引用類型作為參數來實例化構造類型時,無論引用類型的具體類型是什么,運行庫都會重用以前創建的泛型類型的專用版本。之所以可以這樣,是因為所有引用的大小相同。

例如,假設您有兩個引用類型:一個 Customer 類和一個 Order 類,并且進一步假設您創建了一個 Customer 類型的堆棧:

  1. class Customer { }  
  2. class Order { }  
  3.  
  4. Stack<Customer> customers; 

在此情況下,運行庫生成 Stack<T> 類的一個專用版本,該版本不是存儲數據,而是存儲稍后將填寫的對象引用。假設下一行代碼創建另一個引用類型的堆棧,稱為 Order:

  1. Stack<Order> orders = new Stack<Order>(); 

不同于值類型,對于 Order 類型不創建 Stack<T> 類的另一個專用版本。而是創建 Stack<T> 類的一個專用版本實例,并將 orders 變量設置為引用它。假設接下來您遇到一行創建 Customer 類型堆棧:

C# 泛型代碼:

  1. customers = new Stack<Customer>(); 

與前面使用 Order 類型創建的 Stack<T> 類一樣,創建了專用 Stack<T> 類的另一個實例,并且其中所包含的指針被設置為引用 Customer 類型大小的內存區域。因為引用類型的數量會隨程序的不同而大幅變化,C# 泛型實現將編譯器為引用類型的泛型類創建的專用類的數量減小到一個,從而大幅減小代碼量的增加。

此外,使用類型參數實例化泛型 C# 類時,無論它是值類型還是引用類型,可以在運行時使用反射查詢它,并且可以確定它的實際類型和類型參數。

運行庫中的C# 泛型的基本內容就向你介紹到這里,希望對你了解和學習運行庫中的C# 泛型有所幫助。

【編輯推薦】

  1. C# 類型參數約束分析及應用淺析
  2. C# 泛型接口應用淺析
  3. C# 泛型方法概念及使用淺析
  4. C# 泛型數組學習小結
  5. C# 泛型委托學習經驗淺析
責任編輯:仲衡 來源: MSDN
相關推薦

2009-08-24 16:39:19

C# 泛型應用

2011-06-22 10:04:03

C#開發

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 13:41:23

C# 泛型約束

2009-08-24 16:19:42

C# 泛型方法

2009-08-24 10:07:57

C#泛型處理

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 17:27:05

C#泛型應用

2009-08-24 11:35:20

C# 泛型應用

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 14:20:13

C# 強制類型轉換

2009-08-24 12:58:15

C# 泛型約束

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 10:37:27

C# 泛型

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 14:26:42

C# 泛型類

2009-06-24 10:25:25

C#泛型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本精品国产 | 看av片网站 | 久久国产精品色av免费观看 | 久久er精品 | 午夜大片 | 这里精品 | 青草青草久热精品视频在线观看 | 欧美一区二区三区在线观看 | 中文字幕加勒比 | 亚洲精品乱码久久久久久按摩观 | 久久久精品影院 | 国产精品久久久久久久久免费 | 一级黄色短片 | 欧美一区二区三区视频 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 99久久亚洲| 国产一区在线视频 | 午夜视频在线观看网址 | 中文字幕在线一区二区三区 | 一区二区三区精品视频 | 国产精品欧美一区二区三区 | 久久精品中文字幕 | 色综合99| 中文字幕在线第一页 | 三级视频国产 | 国产精品视屏 | 成人久久久久 | 91精品国产91久久久久游泳池 | 亚洲成人中文字幕 | 亚洲在线| 午夜av电影 | 国产 日韩 欧美 中文 在线播放 | 一区二区在线观看av | 日韩在线综合 | 日韩一区二区在线视频 | 在线看日韩av | 欧美一区二区三区,视频 | 欧洲免费毛片 | 欧美一区二区三区大片 | 日本一区二区三区四区 | 日本a视频|