淺析.NET泛型

      泛型是.NET Framework 2.0最強大的功能,經過泛型能夠定義類型安全的數據結構,而沒有必要使用實際的數據類型,這將顯著提升性能並獲得更高質量的代碼。在.NET Framework 2.0以前,沒有泛型的時候,常常使用的是數組,可是這樣的話避免不了的會產生拆箱和裝箱的操做。程序員

      泛型在IL(中間語言)和CLR自己中都支持,在編譯泛型C#代碼時,首先編譯器會將其編譯爲IL,就像其餘任何類型同樣。從.NET編譯層面來說,大致分爲兩次編譯,一次是語言層面的編譯,也就是把C#或VB語言編程成IL中間語言,第二次編譯JIT(即時編譯),這時候是把IL中間語言編程成機器碼,具體的能夠查看《CLR via C》和《程序員的自我修養--連接、裝載與庫》這兩本書,對於泛型 IL只包含實際特定類型的參數或佔位符,並有專用的IL指令支持泛型操做。真正的泛型實例化工做以「on-demand」的方式,發生在 JIT 編譯時。當進行JIT 編譯時,JIT 編譯器用指定的類型實參來替換泛型 IL 代碼元數據中的 T,進行泛型類型的實例化。這會向JIT編譯器提供類型特定的IL元數據定義,就好像從未涉及到泛型同樣。簡單來說就是在實例化類時,根據用戶指定的數據類型代替T並由即時編譯器(JIT)生成本地代碼,這個本地代碼中已經使用了實際的數據類型,等同於用實際類型寫的類。這點上要比Java的擦除法的僞泛型要強不少。再說下元數據,這個東西在在編譯成IL中間語言時候它就有了,它是一個二進制數據塊,由幾個表組成,大體包含的信息就是源代碼中的類型、字段、方法、屬性和事件,其實在用visual studio開發的時候,可能不少人可能都沒有留意,VS的智能提示其實都是靠編譯後的元數據來提示的,包括反射都是用的元數據。編程

     以上就是對.NET泛型的簡單說明,若有什麼問題,能夠關注個人微信公衆號反饋給我,我也會盡可能的在那上面分享一些技術文章。以上詳細知識能夠參考《C#數據結構》《CLR via C》和《程序員的自我修養--連接、裝載與庫》這三本書。數組

相關文章
相關標籤/搜索