入坑.Net 也已經兩年多了,既然在微軟.Net 體系下混,對.Net 體系也需要瞭解一下,當然這些知識也都是查閱資料都能夠查到的,這裡主要是對自己所學的整理,況且最近的學習有些閉門造車的味道,現在想寫出來和大家分享一下,如果理解有偏差,歡迎園友指正! .Net Framework經歷了很多版本的變 ...
入坑.Net 也已經兩年多了,既然在微軟.Net 體系下混,對.Net 體系也需要瞭解一下,當然這些知識也都是查閱資料都能夠查到的,這裡主要是對自己所學的整理,況且最近的學習有些閉門造車的味道,現在想寫出來和大家分享一下,如果理解有偏差,歡迎園友指正!
.Net Framework經歷了很多版本的變更,但是它的框架沒有太大的變化,包括了公共語言運行時(CLR)、基類庫和.Net Framework類庫、公共語言規範和支持的語言;
公共語言運行時(CLR)
CLR是.Net Framework的基礎內容,也是.Net程式的運行環境,可以將其看作一個在執行時管理代碼的代理,它提供了記憶體管理、線程管理、代碼執行、垃圾收集(GC)和遠程處理等核心服務,並且還強制實施嚴格的類型安全以及可提高安全性和可靠性的其他形式的代碼準確性。
C#或者其它各種語言編寫的源代碼通過編譯器生成IL代碼托管(IL也稱托管代碼),最後得到一個托管模塊,一個或多個托管模塊組成程式集(assembly)交給CLR運行,但是CLR還是不能直接和操作系統(OS)直接交互,還需要JIT引擎來進行“翻譯”,變成電腦可以識別的二進位代碼交給操作系統執行。
對了這裡提到了CLR就不得不提到托管代碼和非托管代碼:
托管代碼 (managed code)是由CLR(而不是直接由操作系統)執行的代碼。托管代碼應用程式可以獲得公共語言運行庫服務,例如自動垃圾回收、運行庫類型檢查和安全支持等。這些服務幫助提供獨立於平臺和語言的、統一的托管代碼應用程式行為。在托管執行環境中使用托管代碼及其編譯,可以避免許多典型的導致安全黑洞和不穩定程式的編程錯誤。同樣,許多不可靠的設計也自動的被增強了安全 性,例如 類型安全檢查,記憶體管理和釋放無效對象。程式員可以花更多的精力關註程式的應用邏輯設計並可以減少代碼的編寫量。這就意味著更短的開發時間和更健壯的程式。
非托管代碼 (unmanaged code)是指在公共語言運行庫環境的外部,由操作系統直接執行的代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務;它與托管代碼不同,後者從公共語言運行庫中獲得這些服務。
基類庫和.Net Framework
基類庫(NET Standard Library)包含支持底層操作的一系列通用功能,覆蓋了集合操作、線程支持、代碼生成、輸入輸出(IO)、映射和安全等領域的內容。另外,.Net Core也是基類庫的實現,當然也有自己獨特的實現,並且與.Net Framework不同,它是支持跨平臺的,詳細學習會在後續的博客中分享。
.Net Framework是基類庫在windows操作系統下的實現,包含類庫:資料庫訪問(ADO .NET等)、XML支持、目錄服務(LDAP等)、正則表達式和消息支持;並且還實現很多我們開發人員平常使用的應用程式開發技術:ASP .NET技術、WinFroms技術和WPF技術等高級編程技術。
公共語言規範
很遺憾,我對這公共語言規範(CLS)也不瞭解,也只能說說大概。
.Net支持很多語言,有C#、VB等,每種語言必定帶著自己的特性,但是大家都能夠通過編譯在CLR上面跑,並且都可以與其他語言進行互操作,這都是因為所有語言都遵守了CLS;.NET Framework將CLS定義為一組規則,所有.NET語言都應該遵循此規則才能創建與其他語言可互操作的應用程式,但要註意的是為了使各語言可以互操作,只能使用CLS所列出的功能對象,這些功能統稱為與CLS相容的功能。再往下的細節實現就不知道了,把這個也列在今後的學習計劃當中吧。
總結
本篇博客就寫到這吧,內容也大都是園子里內容,也希望能夠幫助到想入坑.Net的朋友們。