初探.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:向下兼容
Type Cheker:類型安全執行(任何不符合類型安全的強制轉換後,都會進行檢查,除此之外還自動檢查未初始化的變量與超過索引的數組)
Exception Manager:異常處理機制
後續內容將逐步完善,請持續關注!