?.NET 概念比較龐大,本文只討論基礎知識,只用簡單語言描述。
我們是NET程序員,但是我們有沒有思考過到底什么是.NET ?
官方定義 .NET是微軟推出來的一個致力于敏捷開發的軟件框架。
大概2000年年左右,微軟推出了.NET 標準規范,既然有了標準就等于開發時候定義接口一樣,需要東西去實現它。.NET Framework 就是 .NET 的具體實現。
可以這么認為 .NET一種優秀的設計規范和平臺標準。
下面我們來說說什么是 .NET Framework?
官方定義 .NET Framework 是 Windows 的托管執行環境,可為其運行的應用提供各種服務。
.NET Framework 有兩個主要組件:
1. .NET 公共語言運行時 (Common Language Runtime,CLR)
CLR核心功能:內存管理,程序集加載,安全性,異常處理,和線程同步,CLR像一個管家一樣,管理著程序代碼的執行,為程序提供一個運行環境。被CLR托管的代碼就叫托管代碼。
要想了解CLR機制,就要知道我們寫的C#代碼經過VS 編譯之后變成了什么?
左邊的圖是將我們編寫的C#源代碼編譯成托管模塊,右邊圖是托管模塊的組成部分,這里我們只關注IL代碼,其他的不用關注。C#代碼經過編譯器生成的并不是最終的CUP指令,而是一個中間語言IL代碼,也就是托管代碼,CLR操作的就是IL代碼,最終由CLR將IL編譯成計算機可以認識的Cpu指令。我們應該知道程序運行時候需要占用計算機的內存,C++時代的的程序員是需要自己手動操作管理內存的,需要自己分配和釋放內存。但是我們.NET程序員是不需要進行這個操作的。這是因為CLR幫我們自動做分配內存和釋放內存的這個操作了。這個操作對于NET開發者來說是透明的,這就是文章的前面所說CLR的主要功能內存管理。由CLR管理釋放的內存空間叫做托管堆。在托管堆上的代碼稱之為安全代碼也叫托管代碼,反之不在托管堆上的代碼就叫非托管代碼,非托管代碼有可能造成內存泄漏。
CLR是很復雜的一個東西。本文不做過多的討論,只是對其概念進行簡單的講解。
2. Framework 類庫
.NET Framework類庫應該比較好理解,類似我們自己封裝工具類一樣的概念。Framework 類庫 (Framework Class Library) 簡稱 FCL,FCL 里面定義了數千個類型供我們用。利用這些類型我們可以開發各種類型的應用程序 webService,MVC,Windows Forms ,WPF,Windows 服務等。所以要想學好.NET的,雖然不需要你都掌握整個.NET類庫。這也不現實,但是也要盡可能掌握常用的類型。
總結
.NET Framework是.NET平臺標準的主要的實現,實現的不僅僅有.NET Framework還有.NET Core和mono。
.NET Framework包含CLR和 FCL。
CLR為.NET程序提供一個運行環境并對其進行托管。
FCL Framework類庫為.NET程序員提供了大量豐富的基礎類型供其使用。封裝了一些基礎的操作,為了.NET程序員的開發提供了便利。
ps:文章乃個人學習筆記。大神勿噴。