.NET 是一个免费的跨平台开放源代码开发人员平台,用于生成多种类型的应用程序。 .NET 可以运行使用多种语言编写的程序,其中 C# 是最常用的语言。 .NET 依赖于许多大规模应用在生产中使用的高性能运行时。
若要了解如何下载 .NET 并开始编写第一个应用,请参阅入门指南。
.NET 平台专为实现高效工作、性能、安全性和可靠性而设计。 它通过垃圾回收器 (GC) 提供自动内存管理。 由于使用了 GC 和严格的语言编译器,.NET 的类型安全且内存安全。 它通过 async/await 和 Task 基元实现并发。 .NET 包含大量库,这些库具有广泛的功能,并针对多个操作系统和芯片体系结构的性能进行了优化。
.NET 具有以下设计亮点:
- 生产力是全栈的,包括运行时、库、语言和工具,这些都有助于改进开发人员的用户体验。
- “安全代码”是主要的计算模型,而“不安全代码”可实现额外的手动优化。
- 支持静态代码和动态代码,可实现各种不同场景。
- 本机代码互操作和硬件内部函数成本低且保真度高(原始 API 和指令访问)。
- 代码可跨平台(OS 和芯片架构)移植,而平台目标则可以实现专业化和优化。
- 借助通用编程模型的专用实现,可以实现跨编程领域(云、客户端、游戏)的适应性。
- OpenTelemetry 和 gRPC 等行业标准比定制解决方案更受青睐。
.NET 由 Microsoft 和社区维护。 它定期更新,以确保用户将安全可靠的应用程序部署到生产中。
一、组件
.NET 包括以下组件:
- 运行时 – 执行应用程序代码。
- 库 – 提供实用工具功能,如 JSON 分析。
- 编译器 – 将 C#(和其他语言)源代码编译为(运行时)可执行代码。
- SDK 和其他工具 – 支持使用新式工作流生成和监视应用。
- 应用堆栈 – 例如 ASP.NET Core 和 Windows 窗体,支持编写应用。
运行时、库和语言是 .NET 堆栈的重要组成部分。 高级组件(例如 .NET 工具)和应用堆栈(例如 ASP.NET Core)基于这些重要部分生成。 C# 是 .NET 的主要编程语言,.NET 的大部分内容都是用 C# 编写的。
C# 面向对象,运行时支持对象方向。 C# 需要垃圾回收,而运行时提供跟踪垃圾回收器。 库(以及应用堆栈)将这些功能塑造成概念和对象模型,使开发人员能够在直观的工作流中高效编写算法。
核心库公开了数千种类型,其中许多类型与 C# 语言集成并为 C# 语言提供支持。 例如,C# 的 foreach 语句用于枚举任意集合。 基于模式的优化使 List 等集合能够简单高效地处理。 可以将资源管理留给垃圾回收,但可以通过 IDisposable 和 using 语句中的直接语言支持根据提示进行清理。
支持同时执行多项操对于几乎所有工作负载至关重要。 这些操作可能是在保持 UI 响应的同时执行后台处理的客户端应用程序、处理数千个同时请求的服务、响应大量同时刺激的设备,或者并行处理计算密集型操作的高性能计算机。 异步编程支持是 C# 编程语言的一流功能,它提供 async 和 await 关键字,可以轻松编写和组合异步操作,同时仍然体验该语言提供的所有控制流构造的全部好处。
类型系统提供重要的广度,在某种程度上同样迎合了安全性、描述性、动态性和本机互操作性。 首先,类型系统支持面向对象的编程模型。 它包括类型、(单基类)继承、接口(包括默认方法实现)和虚拟方法调度,为面向对象允许的所有类型分层提供合理的行为。 泛型类型是一种普遍功能,可用于将类专用于一个或多个类型。
.NET 运行时通过垃圾回收器提供自动内存管理。 对于任何语言,其内存管理模型可能是其最具决定性的特征。 这适用于 .NET 语言。 .NET 具有一个自我调整的跟踪 GC。 它用于在一般情况下提供“不动手”操作,同时为更极端的工作负载提供配置选项。 当前的 GC 是多年投资和从大量工作负载中学习的结果。
与 .NET 的 GC 托管的类型相比,值类型和堆栈分配的内存块提供了对数据和本机平台互操作更直接、低级别的控制。 .NET 中的大多数基元类型(例如整数类型)都是值类型,用户可以使用类似的语义定义自己的类型。 .NET 的泛型系统完全支持值类型,这意味着 List 这样的泛型类型可以提供值类型集合的平面无开销内存表示。
反射是一种“程序即数据”范例,使程序的一个部分根据程序集、类型和成员动态查询和调用另一个部分。 这对于后期绑定编程模型和工具非常有用。
异常是 .NET 中的主要错误处理模型。 异常的优势在于,错误信息不需要在方法签名中表示,也不需要由每个方法处理。 正确的异常处理对于应用程序的可靠性至关重要。 为了防止应用崩溃,可以有意处理代码中的预期异常。 崩溃的应用比具有未定义行为的应用更可靠且可诊断。
应用堆栈(例如 ASP.NET Core 和 Windows 窗体)生成并利用低级库、语言和运行时。 应用堆栈定义了应用的构造方式及其执行生命周期。
SDK 和其他工具可在开发人员桌面上和持续集成 (CI) 中带来新式开发人员体验。 新式开发人员体验包括能够生成、分析和测试代码。 .NET 项目通常可以通过单个 dotnet build 命令生成,该命令可协调还原 NuGet 包并生成依赖项。
NuGet 是适用于 .NET 的包管理器。 其中包含数十万个包,这些包可实现多种场景的功能。 大多数应用依赖于 NuGet 包来实现某些功能。 NuGet 库由 Microsoft 维护。
二、免费且开源
.NET 是免费的开放源代码,并且是一个 .NET 基金会项目。 .NET 由 Microsoft 和 GitHub 上的社区在几个存储库中维护。
.NET 源和二进制文件获得了 MIT 许可证许可。 附加许可证适用于 Windows。
三、支持
.NET 受到多个组织的支持,这些组织致力于确保 .NET 可以在多个操作系统上运行并保持最新版本。 它可以在 Arm64、x64 和 x86 体系结构上使用。
根据我们的版本和支持政策,.NET 的新版本在每年 11 月发布。 它每月在星期二补丁日(第二个星期二)进行更新,通常是太平洋时间上午 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。