初探.NET底層原理
學習C#離不開.net平臺,因為微軟的開發平臺真的是太強大了,它為每一個開發者都做了太多太多,但是我們不僅要知道怎么用,而且也應該知道其中的內部到底包含了什么。本篇文章不僅講一些C#語言的知識,也包括.net平臺中的一些運行的機理。
相比java由于微軟對C#語言的封裝,讓許多人在其學習的較長時間內不能深刻理解。舉個簡單的例子:我們知道C#語言關于字段的封裝:在C#語言的實現中是get和set屬性,而在Java中確是get和set方法讓人一目了然,其實C#也是利用get,set方法實現的,只不過封裝起來,大家看不到而已。
下面我們將從頭講起C#語言中的底層原理:
首先我們要知道任何語言的運行,歸根到底是機器語言的運行,也就是大量的01數字。而C#語言也正是依靠.net平臺,將這種高級語言編譯成01代碼。那么C#語言在.net平臺中的編譯過程到底是怎樣的呢?
其實.NET平臺相當于Java中的虛擬機,通過C#編譯器得到中間語言(一種特殊的字節碼),運行時再經由CLR中的JIT(just in Time)編輯器編譯為機器代碼,便于OS執行。
那么下面我們來看一下.NET中包含哪些內容?
該圖為.NET平臺機構圖,可以發現VS.NET框架的核心技術為公共語言運行時(CLR)而且還包含BCL(基礎類庫)以及.NET中的各種語言,為何會有這么多種語言可以在.net平臺中運行呢?其實,以上的各種語言都可以編寫面向CLR的程序代碼,這種代碼在.net中被稱為托管代碼,所有的托管代碼都可以在CLR上運行,具有平臺無關性。為何.net不能實現跨平臺呢?例如在linux中為何不可以實現asp.net或者winform呢,其實就是因為沒有面向Linux開發的CLR(不過mono貌似已經實現了,由于本人并未使用過,所以就不予置講了),就是這樣的原因,.net未能實現跨平臺。
下面我們來看CLR中的包含哪些內容?
Base Class LIbrary Support:基礎類庫支持
Thread Support:CLR支持多線程(任何語言都可以利用此提供的服務來進行編寫多線程應用程序)。
COM Marshaler:向下兼容(詳細內容請看:https://msdn.microsoft.com/zh-cn/library/bb822049(v=vs.110).aspx)
Type Cheker:類型安全執行(任何不符合類型安全的強制轉換后,都會進行檢查,除此之外還自動檢查未初始化的變量與超過索引的數組)
Exception Manager:異常處理機制
IL to Native Compliers:是指利用CLR對MSIL進行編譯成機器代碼。
GC:垃圾回收器并不能管理內存中所有的資源,開發人員仍然需要自己寫代碼實現回收,如使用close方法和dispose方法。
后續內容將逐步完善,請持續關注!
新聞熱點
疑難解答