日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺析運行庫中的C#泛型

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

C# 泛型應(yīng)用實例:

例如,假設(shè)您的程序代碼聲明了一個由整數(shù)構(gòu)造的堆棧,如下所示:

 
 
 
  1. Stack stack; 

在此位置,運行庫生成 Stack 類的專用版本,并相應(yīng)地用整數(shù)替換其參數(shù)?,F(xiàn)在,只要程序代碼使用整數(shù)堆棧,運行庫就會重用生成的專用 Stack 類。在下面的示例中,創(chuàng)建了整數(shù)堆棧的兩個實例,它們共享 Stack 代碼的單個實例:

 
 
 
  1. Stack stackOne = new Stack();  
  2. Stack stackTwo = new Stack(); 

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

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

例如,假設(shè)您有兩個引用類型:一個 Customer 類和一個 Order 類,并且進(jìn)一步假設(shè)您創(chuàng)建了一個 Customer 類型的堆棧:

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

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

 
 
 
  1. Stack orders = new Stack(); 

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

C# 泛型代碼:

 
 
 
  1. customers = new Stack(); 

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

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

運行庫中的C# 泛型的基本內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習(xí)運行庫中的C# 泛型有所幫助。


分享標(biāo)題:淺析運行庫中的C#泛型
當(dāng)前路徑:http://m.5511xx.com/article/cceeogj.html