av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

淺析運(yùn)行庫(kù)中的C#泛型

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

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

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

 
 
 
  1. Stack stack; 

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

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

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

對(duì)于引用類(lèi)型,C# 泛型的工作方式略有不同。***次使用任何引用類(lèi)型構(gòu)造泛型類(lèi)型時(shí),運(yùn)行庫(kù)會(huì)創(chuàng)建專(zhuān)用泛型類(lèi)型,用對(duì)象引用替換 MSIL 中的參數(shù)。然后,每次使用引用類(lèi)型作為參數(shù)來(lái)實(shí)例化構(gòu)造類(lèi)型時(shí),無(wú)論引用類(lèi)型的具體類(lèi)型是什么,運(yùn)行庫(kù)都會(huì)重用以前創(chuàng)建的泛型類(lèi)型的專(zhuān)用版本。之所以可以這樣,是因?yàn)樗幸玫拇笮∠嗤?/p>

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

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

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

 
 
 
  1. Stack orders = new Stack(); 

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

C# 泛型代碼:

 
 
 
  1. customers = new Stack(); 

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

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

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


文章題目:淺析運(yùn)行庫(kù)中的C#泛型
本文URL:http://uogjgqi.cn/article/cceeogj.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流