老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

.NET中的泛型和Java泛型中的類型擦除

開(kāi)放類型和閉合類型

網(wǎng)站設(shè)計(jì)、網(wǎng)站制作中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷成為有效果、有回報(bào)的無(wú)錫營(yíng)銷推廣。創(chuàng)新互聯(lián)建站專業(yè)成都網(wǎng)站建設(shè)十年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

.NET把帶有類型參數(shù)的類型看做一個(gè)新的類型,CLR將為這些類型創(chuàng)建內(nèi)部類型對(duì)象,帶有類型參數(shù)的類型可以是類,結(jié)構(gòu),接口和委托。但是,一個(gè)帶有類型參數(shù)的類型稱為開(kāi)放類型,CLR不允許開(kāi)放類型實(shí)例化(就好比不允許接口實(shí)例化一樣)。

當(dāng)代碼中引用了泛型類型,代碼里可以指定一組泛型類型參數(shù)。如果傳入實(shí)際的數(shù)據(jù)類型,那么這個(gè)類型就成為閉合類型,CLR允許實(shí)例化閉合類型。然而,也有可能代碼引用了泛型類型,但未指定泛型類型參數(shù),這就在CLR中創(chuàng)建了一個(gè)新的開(kāi)放類型,這種類型無(wú)法實(shí)例化,看一個(gè)例子。

  1. internal sealed class DictionaryStringKey :Dictionary 
  2.         { 
  3.         } 
  4.         static void Main(string[] args) 
  5.         { 
  6.             Object o = null; 
  7.             // Dictionary<,> 有2個(gè)類型參數(shù)的開(kāi)放類型 
  8.             Type t = typeof(Dictionary<,>); 
  9.             // 創(chuàng)建實(shí)例會(huì)失敗 
  10.             o = CreateInstance(t); 
  11.             Console.WriteLine(); 
  12.             // DictionaryStringKey<>有一個(gè)類型參數(shù)的開(kāi)發(fā)類型 
  13.             t = typeof(DictionaryStringKey<>); 
  14.             // 創(chuàng)建該類型的實(shí)例也會(huì)失敗 
  15.             o = CreateInstance(t); 
  16.             Console.WriteLine(); 
  17.             // DictionaryStringKey 是閉合類型 
  18.             t = typeof(DictionaryStringKey); 
  19.             // 創(chuàng)建成功 
  20.             o = CreateInstance(t); 
  21.             // 輸出類型名字 
  22.             Console.WriteLine("Object type=" + o.GetType()); 
  23.         } 
  24.         private static Object CreateInstance(Type t) 
  25.         { 
  26.             Object o = null; 
  27.             try 
  28.             { 
  29.                 //使用默認(rèn)的構(gòu)造函數(shù)來(lái)創(chuàng)造該類型的實(shí)例 
  30.                 o = Activator.CreateInstance(t); 
  31.                 Console.Write("Created instance of {0}", t.ToString()); 
  32.             } 
  33.             catch (ArgumentException e) 
  34.             { 
  35.                 Console.WriteLine(e.Message); 
  36.             } 
  37.             return o; 
  38.         } 

運(yùn)行結(jié)果:

.NET中的泛型和Java泛型中的類型擦除

Activator.CreateInstance創(chuàng)建實(shí)例的時(shí)候,會(huì)提示你該類型包含泛型參數(shù)。

輸出中,可以看到類型名稱后跟著反引號(hào)(`)以及一個(gè)數(shù)字。這個(gè)數(shù)字即類型中的類型參數(shù)的數(shù)量。比如泛型Dictionary類是2,因?yàn)樗枰?個(gè)類型參數(shù)來(lái)指示TKey和TValue。DictionaryStringKey類只有1個(gè)因?yàn)樗恍枰该?個(gè)類型TValue。

.NET中的類型

.net中,除了實(shí)例構(gòu)造器,CLR也支持類型構(gòu)造器(也稱作靜態(tài)夠器,類夠在其或者類型初始化器)。類型構(gòu)造器可以應(yīng)用于接口(c#中不支持),引用類型(class)和值類型(struct),和實(shí)例構(gòu)造器初始化類型的實(shí)例一樣,類型構(gòu)造器用來(lái)初始化類型的一些狀態(tài),類型的構(gòu)造器如果有的話 只可能有1個(gè),并且是無(wú)參的。可以參考之前的文章。

http://cnn237111.blog.51cto.com/2359144/576533

由于CLR保證了類型初始化器只執(zhí)行一次,并且是線程安全的,因此類型初始化器適用于用在單例模式中對(duì)單例對(duì)象的初始化。

類型中的靜態(tài)字段可以認(rèn)為是類型的一部分,而類型中的非靜態(tài)字段可以認(rèn)為是實(shí)例對(duì)象的一部分。當(dāng)JIT編譯器把IL語(yǔ)言轉(zhuǎn)換成本地的CPU指令的時(shí)候,會(huì)遇到很多類型(比如自定義的class),CLR為了能正確的加載包含這些類型的程序集,它會(huì)通過(guò)程序集的元數(shù)據(jù),抽取出類型的信息,然后創(chuàng)建這些類型的數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)作為對(duì)象存放在堆中。堆中所有的對(duì)象都有2個(gè)成員,類型對(duì)象指針和同步塊索引。類型中定義的靜態(tài)字段也包含在數(shù)據(jù)結(jié)構(gòu)對(duì)象中。類的實(shí)例對(duì)象都共享類型對(duì)象中同一個(gè)靜態(tài)字段。如下圖:方框中的Manager是類型對(duì)象,靜態(tài)字段存在于類型對(duì)象中。實(shí)例對(duì)象由橢圓框表示,指向類型對(duì)象。

.NET中的泛型和Java泛型中的類型擦除

對(duì)于.NET泛型來(lái)說(shuō),每一個(gè)閉合類型都有自己的靜態(tài)字段。也就是說(shuō)List<>和List中的靜態(tài)字段是互相獨(dú)立的。同樣的,如果泛型類型定義了一個(gè)靜態(tài)構(gòu)造器,這些構(gòu)造器也是按照各自的閉合類型運(yùn)行。也就是說(shuō),List和List有自己獨(dú)立的靜態(tài)構(gòu)造器。

  1. static void Main(string[] args) 
  2.         { 
  3.             bool issame = typeof(List) == typeof(List); 
  4.             Console.WriteLine(issame); 
  5.             object o = Activator.CreateInstance(typeof(List)); 
  6.             Console.WriteLine(o.GetType()); 
  7.             o = Activator.CreateInstance(typeof(List)); 
  8.             Console.WriteLine(o.GetType()); 
  9.         } 

運(yùn)行結(jié)果如下:

.NET中的泛型和Java泛型中的類型擦除

Java泛型中的類型擦除

  經(jīng)常聽(tīng)人說(shuō)起Java的泛型是偽泛型,因?yàn)樵诰幾g或運(yùn)行期間,java的JIT會(huì)對(duì)進(jìn)行類型擦除。即JVM無(wú)法真正識(shí)別出泛型類型,因此在真正運(yùn)行前會(huì)把泛型類型轉(zhuǎn)換成原始類型。因此,所有的泛型類型,本質(zhì)上都共享同一個(gè)類型對(duì)象。比如List類型在擦除后變成非泛型的List,這個(gè)List可以存放任何類型的數(shù)據(jù)。因此,Java在運(yùn)行的時(shí)候,無(wú)法獲得類型。當(dāng)然,使用反射也許可以知道,但是并不保證總是能夠得到類型。因此在Java代碼中,不同的泛型類型其實(shí)都是出自相同的類型。例如下面代碼:

  1. public static void main(String[] args) throws Exception { 
  2.   List li = new ArrayList(); 
  3.   List lf = new ArrayList(); 
  4.   boolean issame = li.getClass() == lf.getClass(); 
  5.   System.out.println(issame);//true 
  6.   Object o = li.getClass().newInstance(); 
  7.   System.out.println(o.getClass().getName());//java.util.ArrayList 
  8.   o = lf.getClass().newInstance(); 
  9.   System.out.println(o.getClass().getName());//java.util.ArrayList 

也正是由于代碼擦除,使得泛型類型本質(zhì)上都是共享同一個(gè)類型對(duì)象,因此類型的靜態(tài)字段也是共享的。例如下面代碼:

  1. public class AtestClass { 
  2. public static int i=0; 
  3. public AtestClass() 
  4. i++; 
  5.  
  6. ------------------ 
  7.  
  8. public static void main(String[] args) throws Exception { 
  9.    AtestClass ai=new AtestClass(); 
  10.    AtestClass af=new AtestClass(); 
  11.    System.out.println(AtestClass.i); 

最終運(yùn)行的結(jié)果是2.


參考文檔:Microsoft.Press.CLR.via.Csharp.4th.Edition.Oct.2012.

https://en.wikipedia.org/wiki/Generics_in_Java.


網(wǎng)頁(yè)名稱:.NET中的泛型和Java泛型中的類型擦除
當(dāng)前網(wǎng)址:http://www.xueling.net.cn/article/pssgjs.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 国产看片网址导航 | 国产精品天干天干 | 久久91在线 | 亚洲乱码日产精品bd | 小14萝裸体洗澡视频免费网站 | 亚洲国产中文在线二区三区免 | 午夜刺激爽爽视频免费观看 | 呦女人与动人物A级毛片 | 亚洲精品久日韩 | 无码专区—va亚洲v专区 | 亚洲爆乳成AV人在线视菜奈实 | 亚洲高清免费看 | gav成人网免费免播放器播放 | 精品无人区麻豆乱码无限制 | 国产精品sm在线观看 | 久热这里只有精品99国产6 | 精品久久久久久无码免费 | 亚洲毛毛片 | 东京热AV人妻无码A片 | 久久伦理影院 | 看色网站 | 免费无码又爽又刺激高潮 | 国产一级免费看视频欧美激情 | 国产胸大一区二区三区粉嫩思欲 | 成人a视频在线观看 | 一区视频在线 | 在线成人精品国产区免费 | 老外黑人欧美一级毛片 | 亚洲性无码AV在线观看 | 国产无遮挡无码裸体视频在现观看 | 日本xxxx小便xxxx偷拍 | 中文字幕乱码久久午夜 | 国产二级av| 国产久热精品 | 亚洲成人精品免费 | 成年日韩免费大片黄在线观看 | 男人边吻奶边挵进去成人网站 | 日本不卡免费一区 | 少妇真实被内射视频三四区 | 亚洲第一页综合图片自拍 | 一级片. |