什么是C#?什么是DOTNET?


本文內容來自我寫的開源電子書《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,萬古如長夜。

dotnet5

毫無疑問,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(公共中間語言),CILCLI(公共語言基礎結構)的一部分,因為不同編程語言的特征都不同,為了讓不同語言編寫的程序都能通過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# 發展歷史 - C# 指南 | Microsoft Docs

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 類庫來處理常見的“管道”零碎工作。


來源:C# 介紹 - C# 指南 | Microsoft Docs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM