.NET 7新特性全面解析
1. 更好的性能
.NET 7 將繼續(xù)提高運(yùn)行時性能,改進(jìn) JIT 編譯器,減少內(nèi)存分配,優(yōu)化 GC,以及提高 ASP.NET Core 和 Entity Framework 的性能。性能優(yōu)化將在整個框架內(nèi)體現(xiàn),為開發(fā)者帶來更佳的開發(fā)體驗(yàn)。
2. 改進(jìn)的 AOT 編譯
.NET 7 將進(jìn)一步改進(jìn) Ahead-of-Time(AOT)編譯,提供更好的啟動性能和更小的應(yīng)用程序體積。通過更好的 AOT 編譯支持,開發(fā)者可以將應(yīng)用程序預(yù)編譯為本機(jī)代碼,從而在運(yùn)行時減少 JIT 編譯的開銷。
3. C# 11 新特性
.NET 7 將搭載 C# 11,引入更多語言特性,提高開發(fā)者的生產(chǎn)力。C# 11 的新特性尚未全部確定,但我們可以期待更多有關(guān)代碼簡化、性能改進(jìn)和互操作性的功能。
請注意,在 C# 11 正式發(fā)布前,這些特性可能會發(fā)生變化。
3.1. 參數(shù) null 檢查
C# 11 可能會引入?yún)?shù) null 檢查,這是一種簡化方法和構(gòu)造函數(shù)參數(shù)檢查的方法。通過在參數(shù)前添加一個感嘆號,編譯器將自動為參數(shù)生成 null 檢查。
3.2. Record 類型改進(jìn)
C# 9 引入了記錄類型(record types),它們是用于創(chuàng)建不可變對象的簡潔方法。C# 11 可能會繼續(xù)完善這一特性,例如提供默認(rèn)的 Deconstruct 方法以便更輕松地將記錄類型分解為變量:
3.3 更簡潔的 using 語句
C# 11 可能會引入更簡潔的 using 語句,允許開發(fā)者在不使用花括號的情況下聲明一個需要釋放的資源。這將使代碼更加簡潔并減少嵌套。例如:
4. 更豐富的跨平臺支持
.NET 7 將擴(kuò)展對 ARM64 和 WebAssembly 的支持,進(jìn)一步強(qiáng)化跨平臺能力。這意味著開發(fā)者可以輕松將應(yīng)用程序部署到更多設(shè)備和平臺,包括 IoT 設(shè)備和移動設(shè)備。
5. 更好的容器支持
.NET 7 將改進(jìn)對容器技術(shù)(如 Docker)的支持,提供更小的鏡像和更好的性能。這將使得將 .NET 應(yīng)用程序部署到容器變得更加便捷,提高應(yīng)用程序在云環(huán)境中的性能。
5.1 更小的容器鏡像
.NET 7 將致力于減小容器鏡像的大小,從而降低部署和運(yùn)行應(yīng)用程序所需的資源。這將通過優(yōu)化基礎(chǔ)鏡像、移除不必要的組件以及提供更多選擇性的依賴項(xiàng)安裝等手段來實(shí)現(xiàn)。更小的容器鏡像將提高容器啟動速度、減少網(wǎng)絡(luò)傳輸時間以及降低存儲成本。
5.2 改進(jìn)的性能
.NET 7 將繼續(xù)關(guān)注在容器環(huán)境中的性能優(yōu)化。這包括改進(jìn) JIT 編譯器、減少內(nèi)存占用、優(yōu)化垃圾回收以及提高 ASP.NET Core 和 Entity Framework 在容器中的性能。這些性能優(yōu)化將有助于提高應(yīng)用程序的響應(yīng)速度和吞吐量,降低資源使用率,從而減少運(yùn)行成本。
5.3 更好的彈性和可觀察性
.NET 7 將致力于提高容器化應(yīng)用程序的彈性和可觀察性。這意味著更好地支持現(xiàn)代云原生架構(gòu)模式,如微服務(wù)、事件驅(qū)動架構(gòu)和服務(wù)網(wǎng)格。此外,.NET 7 將提供更豐富的診斷和監(jiān)控功能,以便開發(fā)者能夠更輕松地監(jiān)控和排查容器中的應(yīng)用程序問題。
5.4 對 Kubernetes 和其他編排工具的改進(jìn)支持
.NET 7 將繼續(xù)加強(qiáng)對 Kubernetes 和其他容器編排工具的支持。這包括改進(jìn)部署模板、提供對 Kubernetes API 的更好支持以及與服務(wù)網(wǎng)格(如 Istio)的集成。這將使得將 .NET 應(yīng)用程序部署到 Kubernetes 變得更加便捷,提高在容器編排環(huán)境中的性能和穩(wěn)定性。
5.5 更好的 DevOps 集成
.NET 7 將關(guān)注與 DevOps 工具鏈的集成,以便更好地支持持續(xù)集成(CI)和持續(xù)部署(CD)流程。這包括與流行的 CI/CD 工具(如 Jenkins、GitLab CI 和 GitHub Actions)的集成,以及提供更多的部署選項(xiàng),如無服務(wù)器計(jì)算平臺(如 Azure Functions 和 AWS Lambda)。
6. 更強(qiáng)大的互操作性
在 .NET 7 中,開發(fā)者可以期待更好的互操作性,例如與原生庫、C++ 代碼或 COM 對象的交互。這將使得開發(fā)者能夠更好地集成現(xiàn)有的代碼庫,并利用原生代碼的性能優(yōu)勢。
結(jié)論
隨著 .NET 7 的發(fā)布,我們可以期待許多令人興奮的新特性和改進(jìn)。從性能優(yōu)化到跨平臺支持,以及 C# 11 的語言特性,.NET 7 將為開發(fā)者帶來更加強(qiáng)大的開發(fā)體驗(yàn)。
請注意,本文中的一些內(nèi)容可能會在 .NET 7 正式發(fā)布前發(fā)生變化。請密切關(guān)注微軟官方的 .NET 7 發(fā)布計(jì)劃,以獲取最新的開發(fā)動態(tài)和新特性。
.Net7重要新功能和改進(jìn)
.NET 7 預(yù)覽版 1 中的新功能
支持
由于 .NET 7 是 .NET 的當(dāng)前版本,它將在接下來的 18 個月內(nèi)獲得 Microsoft 的免費(fèi)支持和補(bǔ)丁。
在操作系統(tǒng)方面,此版本將與 Red Hat Enterprise Linux (RHEL) 版本 8 上的以下架構(gòu)兼容:
AMD x64
Intel x64
ARM (aarch64)
IBM Z
LinuxONE (s390x)
.NET 多平臺應(yīng)用程序用戶界面 (.NET MAUI)
微軟將帶來一個帶有 .NET 7 的現(xiàn)代客戶端,它本機(jī)支持多個平臺。由于 Microsoft 最近還發(fā)布了 .NET MAUI Preview 13,他們計(jì)劃將其逐步推廣到 .NET 6 Release CandIDAtes (RC),然后向公眾推廣通用可用性 (GA),然后再轉(zhuǎn)向 .NET 7。
似乎還有時間讓這個特性進(jìn)入 .NET 7,但很高興知道它會到來。
創(chuàng)建云原生應(yīng)用程序變得更容易
由于云原生應(yīng)用程序現(xiàn)在是從頭開始構(gòu)建的,使用現(xiàn)代基于 Web 的資源(例如數(shù)據(jù)庫服務(wù)和托管容器),.NET 7 將通過探索對開發(fā)人員體驗(yàn)的改進(jìn)來更輕松地構(gòu)建云原生應(yīng)用程序,例如:
簡化實(shí)施安全身份驗(yàn)證和授權(quán)所需的設(shè)置和配置。
提高應(yīng)用程序啟動和運(yùn)行時執(zhí)行的性能。
微軟計(jì)劃進(jìn)一步開發(fā)此功能并優(yōu)化容器,以獲得更好的可用性和體驗(yàn)。
改進(jìn)的 .NET 應(yīng)用程序
一段時間以來,微軟一直在對 .NET 應(yīng)用程序進(jìn)行升級,例如最小化 API 和熱重載、新的運(yùn)行時和 C# 語言創(chuàng)新,以及成熟的庫和工具生態(tài)系統(tǒng)的可用性。
微軟表示,他們將繼續(xù)對這些應(yīng)用程序進(jìn)行創(chuàng)新,以消除每個單獨(dú)的 .NET 應(yīng)用程序所面臨的挑戰(zhàn),例如 ASP.NET、WinForms、WPF 等。
Microsoft 擴(kuò)展的可空注釋
可空注釋允許您檢查值和參數(shù)是否返回空值。Microsoft 為可空性添加了以下庫:
Microsoft.Extensions.DependencyInjection.Abstractions
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Primitives
Microsoft.Extensions.FileSystemGlobbing
Microsoft.Extensions.DependencyModel
Microsoft.Extensions.Configuration.Abstractions
Microsoft.Extensions.FileProviders.Abstractions
Microsoft.Extensions.FileProviders.Physical
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Binder
Microsoft.Extensions.Configuration.CommandLine
Microsoft.Extensions.Configuration.EnvironmentVariables
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Ini
Microsoft.Extensions.Configuration.Json
有了這些,Microsoft 計(jì)劃添加所有 Microsoft.Extension 庫以實(shí)現(xiàn)可空性。
熱重載的改進(jìn)
.NET 6 中的熱重載功能允許開發(fā)人員在應(yīng)用程序運(yùn)行時對其代碼進(jìn)行更改,并隨時隨地查看結(jié)果。此功能首次在 .NET 6 Preview 3 中引入。
微軟現(xiàn)在允許對 Blazor WebAssembly 或 iOS 和 Android 設(shè)備進(jìn)行以下 C# 熱重載:
-
向現(xiàn)有方法添加靜態(tài) lambda
-
將捕獲這個的 lambda 添加到已經(jīng)有至少一個捕獲這個的 lambda 的現(xiàn)有方法中
-
向現(xiàn)有類添加新的靜態(tài)或非虛擬實(shí)例方法
-
向現(xiàn)有類添加新的靜態(tài)字段
-
添加新類