.NET 簡介

.NET 是免費的跨平台開放原始碼開發人員平台,可用來建置多種應用程式。 它可以執行以多種語言撰寫的程式,而 C# 是最受歡迎的程式。 它依賴於許多大規模應用程式在生產環境中所使用的高效能執行階段。

若要了解如何下載 .NET 並開始撰寫您的第一個應用程式,請參閱使用者入門

.NET 平台的設計目的是為了提供生產力、效能、安全性和可靠性。 它會透過記憶體回收行程 (GC) 來提供自動記憶體管理。 由於使用 GC 和嚴格的語言編譯器,所以它是類型安全且是記憶體安全的。 它會透過 async/awaitTask 基本類型來提供並行。 它包含一組具有廣泛功能的大型程式庫,並針對多種作業系統和晶片架構上的效能進行了最佳化。

.NET 具有下列的設計要點

  • 生產力是完整堆疊的,包含執行階段、程式庫、語言和工具,所有這些都有助於開發人員的使用者體驗。
  • 安全的程式碼是主要的計算模型,而不安全的程式碼則需要額外的手動最佳化。
  • 靜態和動態的程式碼都受支援,可實現一系列廣泛的不同場景。
  • 機器碼​互通和硬體內建函式是低成本且高精確度的 (原始 API 和指令存取)。
  • 程式碼可以跨平台移植 (OS 和晶片架構),而針對特定的平台可以實現不同的特製化和最佳化。
  • 跨程式設計領域的適應性 (雲端、用戶端、遊戲) 可透過通用程式設計模型的特製化實作來實現。
  • 業界標準 (例如 OpenTelemetry 和 gRPC) 比客製化解決方案更受青睞。

.NET 是由 Microsoft 和社群所維護。 它會定期更新,以確保使用者將安全且可靠的應用程式部署到生產環境。

元件

.NET 包含下列元件:

  • 執行階段 -- 執行應用程式的程式碼。
  • 程式庫 -- 提供公用程式的功能,例如 JSON 剖析
  • 編譯器 -- 將 C# (和其他語言) 原始程式碼編譯成 (執行階段) 可執行的程式碼。
  • SDK 和其他工具 -- 使用新式工作流程來建置及監視應用程式。
  • 應用程式堆疊 -- 例如 ASP.NET Core 和 Windows Forms,其可支援撰寫應用程式。

執行階段、程式庫和語言是 .NET 堆疊的要素。 更高層級的元件 (例如 .NET 工具) 和應用程式堆疊 (例如 ASP.NET Core) 會建置在這些要素之上。 C# 是 .NET 的主要程式設計語言,而 .NET 的大部分內容都是以 C# 撰寫的。

C# 是物件導向的,而執行階段支援物件導向。 C# 需要記憶體回收,而執行階段提供了一個追蹤式的記憶體回收行程機制。 程式庫 (以及應用程式堆疊) 會將這些功能塑造成概念和物件模型,讓開發人員能夠在直覺式工作流程中有效率地撰寫演算法。

核心程式庫公開了數千種類型,其中許多類型與 C# 語言整合並為其提供支援。 例如,C# 的 foreach 陳述式可讓您列舉任意集合。 基於模式的最佳化可讓像 List<T> 的集合能夠簡單且有效率地來處理。 您可以將資源管理留給記憶體回收,但可以透過 IDisposableusing 陳述式中的直接語言支援來進行及時的清理。

支援同時執行多項作業幾乎是所有工作負載的基礎。 這可能是在保持 UI 能夠回應的同時也進行背景處理的用戶端應用程式、處理數千個同時要求的服務、回應大量同時刺激的裝置,或者是並行處理計算密集型作業的高效能機器。 非同步的程式設計支援是 C# 程式設計語言的一流功能,它提供了 asyncawait 關鍵字,可讓您輕鬆撰寫和組合非同步的作業,同時仍享受該語言所必須提供的所有控制流程建構的全部好處。

類型系統可提供顯著的廣度,在某種程度上同樣滿足安全性、描述性、動態性和原生互通。 首先也是最重要的,類型系統支援物件導向的程式設計模型。 它包括類型、(單一基底類別) 繼承、介面 (包括預設方法實作) 和虛擬方法分派,以為物件導向允許的所有類型分層提供合理的行為。 泛型類型是一項普遍的功能,它可讓您將類別特製化為一或多個類型。

.NET 執行階段會透過記憶體回收行程來提供自動記憶體管理。 對於任何語言,其記憶體管理模型可能是其最具決定性的特性。 對於 .NET 語言也是如此。 .NET 具有自我微調、追蹤式的 GC 機制。 其目標是在一般情況下提供「放手」的動作,同時為更艱難的工作負載提供設定選項。 目前的 GC 是多年投資和從大量工作負載中學習的結果。

與 .NET 的 GC 受控類型相比,值類型和堆疊配置的記憶體區塊可對資料和原生平台互通提供更直接且低階的控制。 .NET 中大部分的基本類型 (像整數類型) 都是值類型,使用者可以使用類似的語意來定義自己的類型。 值類型可透過 .NET 的泛型系統受到完全的支援,這表示像 List<T> 的泛型類型可以對值類型集合提供平面化、無額外負荷的記憶體表示。

反射 (Reflection) 是「程式即資料」的範式,其可讓程式的一個部分根據組件、類型和成員來動態查詢和叫用另一部分。 它對於後期繫結的程式設計模型和工具特別有用。

例外狀況是 .NET 中的主要錯誤處理模型。 例外狀況的好處是錯誤訊息不需要在方法簽章中表示或由每個方法處理。 適當的例外狀況處理對於應用程式可靠性至關重要。 為了防止您的應用程式損毀,您可以刻意處理程式碼中預期的例外狀況。 損毀的應用程式比具有未定義行為的應用程式更可靠且可診斷。

應用程式堆疊 (例如 ASP.NET Core 和 Windows Forms) 建置於低階程式庫、語言和執行時間之上並對其充分運用。 應用程式堆疊定義了應用程式的建構方式及其執行生命週期。

SDK 和其他工具可在開發人員桌面上及對持續整合 (CI) 實現新式的開發人員體驗。 新式的開發人員體驗包括能夠建置、分析和測試程式碼。 .NET 專案通常可由單一的 dotnet build 命令來建置,以協調還原 NuGet 套件和建置相依性。

NuGet 是適用於 .NET 的套件管理員。 它包含了數十萬個套件,可實作多種場景的功能。 大部分的應用程式都依賴 NuGet 套件來實現某些功能。 NuGet 資源庫由 Microsoft 維護。

免費的開放原始碼

.NET 是免費的開放原始碼,而且是 .NET Foundation 專案。 .NET 由 Microsoft 和 GitHub 上的社群在數個存放庫中維護。

.NET 來源和二進位檔具備 MIT 授權。 其他授權適用於 Windows

支援

.NET 受到多個組織的支援,這些組織致力於確保 .NET 可以在多個作業系統上執行並保持最新狀態。 可用於 Arm64、x64 和 x86 架構。

根據我們的發行和支援原則,新版本的 .NET 會每年的 11 月發行。 它通常會在每個月的 Patch Tuesday (第二個星期二) 進行每月更新,時間通常是太平洋時間上午 10 點。

.NET 生態系統

.NET 有多個變體,每個都支援不同類型的應用程式。 有多個變體的原因,一部分是因為歷史、一部分是因為技術。

.NET 實作:

  • .NET Framework -- 原始的 .NET。 它提供對 Windows 和 Windows Server 的廣泛功能的存取。 在維護方面,它受到積極的支援。
  • Mono - 原始的社群和開放原始碼 .NET。 .NET Framework 的跨平台實作。 積極支援 Android、iOS 和 WebAssembly。
  • .NET (Core) -- 新式 .NET。 .NET 的跨平台和開放原始碼實作,針對雲端時代進行了重新的思考,同時保持與 .NET Framework 的重要相容。 積極支援 Linux、macOS 和 Windows。

下一步