第1章 重覽.NET,術(shù)語和新特性(2023)
C#/.NET的發(fā)展速度是十分之快的,現(xiàn)今,C#10、.NET 6、Blazor和WinUI 3以及眾多新功能和特性不斷浮現(xiàn)在我們眼前,這意味著我們不得不進(jìn)一步地去學(xué)習(xí),再度回顧舊知識,了解新特性以從細(xì)節(jié)上完善我們的開發(fā)項(xiàng)目,深度提升開發(fā)能力。這是進(jìn)行C#開發(fā)的一個美好時代。本章我們將再一次大體的介紹.NET,根據(jù)Stack Overflow的2023 Developer Survey了解C#/.NET的開發(fā)環(huán)境和市場情況,并簡單介紹一些新特性。
學(xué)習(xí)教材原書《C#高級編程(第12版)》[奧]Christian Nagel 著
文段內(nèi)容大多為筆者自身的學(xué)習(xí)理解,可能存在誤解或說明不當(dāng)?shù)牡胤?,歡迎大家指正。

1.1 .NET框架的發(fā)展歷史
在初學(xué).NET使用Visual Studio開發(fā)時,開發(fā)框架的選擇讓我一直心存疑惑,對于.NET Framework 、.NET Core和.NET的版本區(qū)分并不是特別清楚。.NET第一個版本發(fā)布于2002年,.NET Framework屬于其第一個時代的產(chǎn)物,最開始的1.0版本到2019年的最后一個版本4.8。2014年,微軟最終向市場妥協(xié),開始熱情擁抱開源和跨平臺。2016年,微軟推正式出 .NET Core 1.0。2020年,為了避免產(chǎn)品線的混亂,微軟開始統(tǒng)一產(chǎn)品線,關(guān)閉了 .NET Framework 這條產(chǎn)品線,并將 .NET Core 產(chǎn)品線更名為 .NET。為了避免與 .NET Framework 4.x 版本號沖突,.NET 產(chǎn)品線直接從版本號 5 開始,即 .NET 5.0,并于這一年 11 月正式發(fā)布。

總的來說,三個版本框架的特點(diǎn)如下:
[] .NET Framework 只能用于Microsoft Windows
[] .NET Core 代碼開源,實(shí)現(xiàn)跨平臺
[] .NET 統(tǒng)一的新版本
有關(guān)更詳細(xì)的版本信息,可以閱讀微軟官方的API文檔,查閱官方API應(yīng)該是.NET開發(fā)者的意識性技能。
1.2 .NET開發(fā)環(huán)境與編譯基本術(shù)語
了解一些基本的術(shù)語是我們學(xué)習(xí)開發(fā)的必要基礎(chǔ)。
.NET SDK
.NET SDK 是一組庫和工具,開發(fā)人員可用其創(chuàng)建 .NET 應(yīng)用程序和庫。 它包含用于構(gòu)建和運(yùn)行應(yīng)用程序的.NET CLI和.NET Runtimes組件。安裝Visual Studio時會自動安裝SDK。
.NET Runtimes
.NET Runtimes是一種軟件框架,用于在Windows操作系統(tǒng)上運(yùn)行.NET應(yīng)用程序。其包含全部核心庫和dotnet驅(qū)動程序。在目標(biāo)系統(tǒng)上,不需要安裝SDK,只需要安裝.NET Runtimes。除此之外,還可以將運(yùn)行庫與應(yīng)用程序打包在一起,稱為自包含部署,以便可以在任何環(huán)境中輕松部署和運(yùn)行。
CLI & CLR
CLI和CLR共稱為公共語言運(yùn)行庫。
[] CLI: Common Language Infrastructure 公共語言基礎(chǔ)框架,處理代碼編譯過程;
[] CLR: Common Language Infrastructure 公共語言行時,程序運(yùn)行環(huán)境與服務(wù);
[] .NET CLI: 安裝SDK時包含的開發(fā)工具,開發(fā).NET應(yīng)用程序的命令行接口。
在編譯時,CLI先將程序編譯為IL(Intermediate Language)代碼 (類似于匯編語言,是一種公共中間語言),CLR再把LR代碼編譯為原生代碼,通過.NET程序集中的JIT(Just-In-Time)即時編譯器編譯為不同平臺特定代碼。
Ronslyn
Roslyn是一種.NET編譯器平臺,用于在運(yùn)行時分析、構(gòu)建和修改C#代碼。它包括一組API和工具,可以幫助開發(fā)人員創(chuàng)建和修改代碼,以及執(zhí)行各種代碼分析和重構(gòu)操作。Roslyn還提供了一種即時編譯的功能,可以在運(yùn)行時編譯和執(zhí)行代碼,這使得開發(fā)人員可以更快地迭代和測試他們的代碼。Roslyn是.NET開發(fā)人員的一個強(qiáng)大工具,可以幫助他們更輕松地創(chuàng)建和維護(hù)高質(zhì)量的C#代碼。
Library
庫(Library)是指一組可重用的代碼和資源,它們通常被打包成一個單獨(dú)的單元,以便在多個項(xiàng)目中共享和重用。庫可以包含各種類型的代碼,例如類、函數(shù)、接口、枚舉、結(jié)構(gòu)體等,以及資源文件、配置文件等。庫可以由開發(fā)人員自己編寫,也可以從第三方獲取,例如NuGet存儲庫。
NuGet
NuGet是一個包管理器,它可以用于在.NET項(xiàng)目中安裝、升級和卸載第三方庫和工具。NuGet包是一種可重用的軟件組件,它們可以包含編譯的代碼、資源文件、配置文件等。
namespace
命名空間是一種組織代碼的方式,它可以將相關(guān)的類、接口、結(jié)構(gòu)體、枚舉等類型組織在一起,以便更好地管理和使用它們。.NET官方提供的類也組織在命名空間中,大多以System
或Microsoft
開頭。
API
API是指應(yīng)用程序編程接口(Application Programming Interface)的縮寫。API是一組定義了軟件組件之間交互的規(guī)范和接口,它們可以讓不同的軟件組件之間進(jìn)行通信和交互,以實(shí)現(xiàn)特定的功能。API可以提供各種類型的功能和服務(wù),例如數(shù)據(jù)訪問、網(wǎng)絡(luò)通信、身份驗(yàn)證、文件操作等。通過使用API,開發(fā)人員可以更輕松地編寫應(yīng)用程序,因?yàn)樗麄兛梢岳矛F(xiàn)有的API來實(shí)現(xiàn)一些常見的功能,而不必從頭開始編寫代碼。
人性化地理解總結(jié)一下:
[] .NET SDK 是一組用于構(gòu)建和運(yùn)行應(yīng)用程序的庫和工具
[] .NET Runtimes 是一種用于在Windows操作系統(tǒng)上運(yùn)行.NET應(yīng)用程序的軟件框架
[] CLI 是公共語言基礎(chǔ)框架,處理代碼編譯過程
[] IL 是一種公共中間語言,由CLI編譯而來
[] CLR 是程序運(yùn)行的環(huán)境與服務(wù)
[] JIT 是即時編譯器,是CLR將IL編譯為不同平臺的原生代碼的工具
[] Ronslyn是.NET的編譯器平臺
[] Library稱作庫,是一組可重用的代碼資源的打包
[] NuGet是包管理器,可以通過它將第三方的包安裝進(jìn)自己的項(xiàng)目中
[] namespace是組織代碼的工具
[] API是應(yīng)用程序編程接口,它是一種調(diào)用別人已經(jīng)寫好的功能和服務(wù)的通道
當(dāng)然,在.NET開發(fā)中還會涉及到很多的專有名詞,在這里就先不為大家列舉和介紹了,在今后的開發(fā)中遇到新的概念時,再為大家做詳細(xì)解釋。
另外,我們一般在調(diào)用某個命名空間中的類和接口時,往往先需要使用using
關(guān)鍵字調(diào)用其命名空間,那么namespace和API有什么關(guān)系呢?他們是相似的嗎?其實(shí)namespace和API是兩個不同的概念,它們之間沒有直接的關(guān)系。namespace提供了一種組織代碼的方式,而API提供了一種訪問和使用這些代碼的方式。它們可以一起使用來實(shí)現(xiàn)特定的功能。
1.3 平臺框架與應(yīng)用程序類型
EF Core
EF Core是一種用于訪問和操縱數(shù)據(jù)庫的框架,是輕量級、可擴(kuò)展的ORM(對象關(guān)系映射)框架,它是Entity Framework的一個分支。ORM框架是一種將關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)映射到對象模型中的技術(shù),它可以幫助開發(fā)人員更輕松地訪問和操作數(shù)據(jù)庫。 ?EF Core是跨平臺的,可以在.NET Core、.NET Framework和Xamarin等平臺上運(yùn)行。它支持多種數(shù)據(jù)庫,包括SQL Server、MySQL、PostgreSQL、SQLite等。EF Core提供了一種面向?qū)ο蟮姆绞絹碓L問和操作數(shù)據(jù)庫,開發(fā)人員可以使用C#或VB.NET等語言來編寫代碼,而不必直接使用SQL語句。
EF Core具有許多功能和優(yōu)點(diǎn),例如:
- 支持LINQ查詢,使得查詢數(shù)據(jù)變得更加簡單和直觀
- 支持遷移,可以幫助開發(fā)人員更輕松地管理數(shù)據(jù)庫模式的變化
- 支持事務(wù),可以確保數(shù)據(jù)的一致性和完整性
- 支持緩存,可以提高應(yīng)用程序的性能和響應(yīng)速度
- 支持異步操作,可以提高應(yīng)用程序的并發(fā)性和吞吐量
C#控制臺應(yīng)用程序
C#控制臺應(yīng)用程序是一種基于命令行界面的應(yīng)用程序,它可以在Windows操作系統(tǒng)上運(yùn)行。它通常用于執(zhí)行一些簡單的任務(wù),例如讀取和寫入文件、處理數(shù)據(jù)、調(diào)用API等??刂婆_應(yīng)用程序可以使用Visual Studio等開發(fā)工具來創(chuàng)建,使用Console類來與用戶進(jìn)行交互,使用命令行參數(shù)來接收用戶輸入的參數(shù)。
Windows應(yīng)用程序
Windows應(yīng)用程序包含通用Windows平臺應(yīng)用(UWP)和Windows桌面應(yīng)用。UWP應(yīng)用程序可以讓開發(fā)人員編寫一次代碼,然后在多個Windows設(shè)備上運(yùn)行,例如PC、手機(jī)、平板電腦、Xbox等,其需要根據(jù)使用的API向用戶請求權(quán)限。Windows桌面應(yīng)用包括WinForm、WPF和WinUI,其相關(guān)程序設(shè)計(jì)教程在其它教程和書籍中詳細(xì)介紹。
Web應(yīng)用程序
眾所周知,.NET的Web端開發(fā)平臺為ASP.NET,開發(fā)區(qū)別在與框架和工具技術(shù)不同,這里為大家介紹ASP.NET 和ASP.NET Core、Razor和Blazor。
ASP.NET是一種基于.NET Framework的Web應(yīng)用程序框架,它可以使用C#、VB.NET等語言進(jìn)行開發(fā)。ASP.NET提供了一種面向?qū)ο蟮姆绞絹韯?chuàng)建Web應(yīng)用程序,開發(fā)人員可以使用ASP.NET Web Forms、ASP.NET MVC等技術(shù)來創(chuàng)建Web應(yīng)用程序的用戶界面和業(yè)務(wù)邏輯。
ASP.NET Core是一種跨平臺的Web應(yīng)用程序框架,它可以在Windows、Linux、macOS等平臺上運(yùn)行。ASP.NET Core是基于.NET Core的,它可以使用C#、F#等語言進(jìn)行開發(fā)。ASP.NET Core提供了一種輕量級、模塊化的方式來創(chuàng)建Web應(yīng)用程序,開發(fā)人員可以使用ASP.NET Core MVC、ASP.NET Core Web API等技術(shù)來創(chuàng)建Web應(yīng)用程序的用戶界面和業(yè)務(wù)邏輯。
Razor也是一種Web框架,提供了一種更加簡潔和直觀的語法來創(chuàng)建Web應(yīng)用程序的用戶界面。其優(yōu)點(diǎn)如下:
- Razor使用類似HTML的標(biāo)記語言,同時還支持C#代碼和表達(dá)式,可以讓開發(fā)人員更加方便地創(chuàng)建動態(tài)和交互式的用戶界面。
- Razor提供了一種更加靈活和可擴(kuò)展的模板引擎。Razor的模板引擎可以讓開發(fā)人員更加方便地自定義和擴(kuò)展模板的行為和功能,例如自定義標(biāo)記、布局、部分視圖等。
- Razor提供了一種更加高效和可維護(hù)的方式來創(chuàng)建Web應(yīng)用程序。Razor的模板引擎可以讓開發(fā)人員更加方便地重用和組合模板,同時還可以提高模板的性能和可維護(hù)性。
- Razor提供了一種更加直觀和易于學(xué)習(xí)的方式來創(chuàng)建Web應(yīng)用程序。相比于ASP.NET的Web Forms和MVC等技術(shù),Razor的語法更加簡單和直觀,可以讓開發(fā)人員更加容易地學(xué)習(xí)和使用。
Blazor是一種新技術(shù),可以被看作是Razor的一種擴(kuò)展,用于消除JavaScript代碼。Blazor是一種基于WebAssembly的Web應(yīng)用程序框架,它可以使用C#、Razor等語言進(jìn)行開發(fā)。Blazor提供了一種全新的方式來創(chuàng)建Web應(yīng)用程序,它可以在瀏覽器中運(yùn)行C#代碼,而不需要使用JavaScript。Blazor可以使用Razor組件來創(chuàng)建Web應(yīng)用程序的用戶界面和業(yè)務(wù)邏輯,開發(fā)人員可以使用Blazor WebAssembly和Blazor Server等技術(shù)來創(chuàng)建Web應(yīng)用程序。Blazor還提供了許多功能和服務(wù),例如組件模型、依賴注入、路由等,可以幫助開發(fā)人員更輕松地創(chuàng)建和部署Web應(yīng)用程序。
1.4 新特性概覽
下面提及一些比較有用且常用易理解的新特性。
C#
使用可用引用類型來減少NullableReferenceException類型的異常
用于提升生產(chǎn)效率的索引和范圍
經(jīng)典簡練的switch表達(dá)式
匹配模式的增強(qiáng)
使用頂級語句減少小型應(yīng)用的源代碼行數(shù)
ASP.NET Core
Blazor
gRPC
Windows
WinUI3
1.5 開發(fā)者調(diào)查報(bào)告
Stack Overflow Developer Survey 2023
https://survey.stackoverflow.co/2023/
Stack Overflow是全球最大的程序員社區(qū)之一,它提供了一個平臺,讓程序員們可以互相交流、分享知識和解決問題。每年,Stack Overflow都會發(fā)布一份Developer Survey,這份調(diào)查報(bào)告涵蓋了全球程序員的各種信息,例如編程語言、工具、技術(shù)、薪資、工作滿意度等。大家可以訪問上面的連接查看2023年的調(diào)查報(bào)告,了解一下C#/.NET技術(shù)的前景趨勢。下面介紹一些我個人比較關(guān)注的統(tǒng)計(jì)信息。
Most popular technologies

Other frameworks and libraries

Integrated development environment


我覺得能成為C#/.NET的開發(fā)人員是一種榮幸,.NET的開發(fā)環(huán)境和社區(qū)氛圍總體上來說都非常好,Visual Studio開發(fā)工具時分便捷,界面設(shè)計(jì)我很喜歡。.NET的發(fā)展更新不斷適應(yīng)新的要求,不斷創(chuàng)造更便利的特性,是一個流行且很有前景的平臺。