本文內容來自我寫的開源電子書《WoW C#》,現在正在編寫中,可以去WOW-Csharp/學習路徑總結.md at master · sogeisetsu/WOW-Csharp (github.com)來查看編寫進度。預計2021年年底會完成編寫,2022年2月之前會完成所有的校對和轉制電子書工作,爭取能夠在2022年將此書上架亞馬遜。編寫此書的目的是因為目前.NET市場相對低迷,很多優秀的書都是基於.NET framework框架編寫的,與現在的.NET 6相差太大,正規的.NET 5學習教程現在幾乎只有MSDN,可是MSDN雖然准確優美但是太過瑣碎,沒有過閱讀開發文檔的同學容易一頭霧水,於是,我就編寫了基於.NET 5的《WoW C#》。本人水平有限,歡迎大家去本書的開源倉庫sogeisetsu/WOW-Csharp關注、批評、建議和指導。
WHAT IS DOTNET ?
DOTNET之前的歲月
天不生.NET,萬古如長夜。
毫無疑問,DOTNET現在是一個跨平台的開發框架,但是DOTNET的產生之時,更多的是為了解決傳統的Windows開發所面臨的問題。傳統的Windows開發基本是使用編程語言來調用Win32 API
或者是COM
。這種方式工程量大、實際代碼復雜、需要大量丑陋的底層代碼。於是微軟推出了下一代平台服務的目標——DOTNET。
.NET 是一個免費的、跨平台的、開源的開發平台,用於構建許多不同類型的應用程序。你可以使用多種語言、編輯器和庫來構建 web、移動、桌面、游戲和物聯網。
來源 What is .NET? An open-source developer platform. (microsoft.com)
DOTNET框架的組成
DOTNET和Java等編程語言最大的不同就是它是一個一整套的解決方案。
劍閣崢嶸而崔嵬,一夫當關,萬夫莫開。
DOTNET由編程工具、基類庫(BCL)和公共語言運行庫(CLR)組成。
-
編程工具包括IDE(visual studio)、各種語言的編譯器和調試器等部分組成。
-
基礎類庫(BCL)是微軟所提出的一組標准庫,可提供給 .NET 所有語言使用。隨着 Windows 以及 .NET 的成長,BCL 已近乎成為在 .NET 上的 Windows API。
-
CLR是DOTNET的核心,它在操作系統的頂層,負責管理程序的運行。
一段代碼在DOTNET上編譯和執行的過程如圖所示:
不同語言的源代碼經由DOTNET兼容編譯器,編譯成CIL
(公共中間語言),CIL
是CLI
(公共語言基礎結構)的一部分,因為不同編程語言的特征都不同,為了讓不同語言編寫的程序都能通過DOTNET運行,所以需要一個統一的標准,這就是CLI
(公共語言基礎結構)。有了CLI之后, C# 生成的 CIL 代碼可以與通過 .NET 版本的 F#、Visual Basic、C++ 生成的代碼進行交互(可以通過調用動態鏈接 DLL)。
DOTNET不是編程語言,但它能通過CLR
(公共語言運行庫)的JIT編譯器
將CIL
(公共中間語言)編譯成本機代碼
,本機代碼
包括托管代碼
和非托管代碼
。
- 托管代碼:為DOTNET框架編寫的代碼,需要CLR。
- 非托管代碼:是指直接編譯成目標計算機的機器碼,比如
Win32 C/C++ DLL
。不在CLR控制下以運行。
本機代碼可以在操作系統上執行,在執行的過程中CLR
(公共語言運行庫)會對托管代碼
進行內存管理、垃圾收集和異常處理等管理。
公共語言運行庫(CLR)
CLR提供以下服務:
- 自動垃圾收集
- 安全和認證
- 通過BCL獲得廣泛的編程能力。
C# & DOTNET
C#的第一個預覽版由微軟在2000年發布,它是一個面向對象的語言,它伴隨着DOTNET產生。它可以經由DOTNET兼容編譯器編譯成CIL(公共中間語言)。
回想起來,和 Visual Studio .NET 2002 一起發布的 C# 版本 1.0 非常像 Java。 在 ECMA 制定的設計目標中,它旨在成為一種“簡單、現代、面向對象的常規用途語言”。 當時,它和 Java 類似,說明已經實現了上述早期設計目標。
C# 程序在 .NET 上運行,而 .NET 是名為公共語言運行時 (CLR) 的虛執行系統和一組類庫。 CLR 是 Microsoft 對公共語言基礎結構 (CLI) 國際標准的實現。 CLI 是創建執行和開發環境的基礎,語言和庫可以在其中無縫地協同工作。
用 C# 編寫的源代碼被編譯成符合 CLI 規范的中間語言 (IL)。 IL 代碼和資源(如位圖和字符串)存儲在擴展名通常為 .dll 的程序集中。 程序集包含一個介紹程序集的類型、版本和區域性的清單。
執行 C# 程序時,程序集將加載到 CLR。 CLR 會直接執行實時 (JIT) 編譯,將 IL 代碼轉換成本機指令。 CLR 可提供其他與自動垃圾回收、異常處理和資源管理相關的服務。 由 CLR 執行的代碼有時稱為“托管代碼”。 “非托管代碼”編譯為面向特定平台的本機語言。
除了運行時服務之外,.NET 還包含大量庫。 這些庫支持多種不同的工作負載。 它們已整理到命名空間中,這些命名空間提供各種實用功能。 這些功能包括文件輸入輸出、字符串控制、XML 分析、Web 應用程序框架和 Windows 窗體控件。 典型的 C# 應用程序廣泛使用 .NET 類庫來處理常見的“管道”零碎工作。