本文以C# 摘得 “2023 年度编程语言“称号为背景,介绍.NET的历史、生态及发展势头,该文章是本人C#专栏的第一篇文章。
2024 年伊始,TIOBE 最新的 1 月榜单重磅发布,C# 首次荣获年度编程语言奖。
对此,TIOBE 软件公司首席执行官 Paul Jansen 表示,“二十多年来,C# 一直稳居前十名,如今,它正在追赶 Python、C、C++、Java 四大语言的脚步,成为一年内涨幅最大的语言(+1.43%),赢得了当之无愧的奖项。”
当有人使用术语“.NET”时,其含义在很大程度上取决于上下文。换句话说,.NET 是共同创建用于生成应用程序的强大环境的许多部件和人员的集合。
最初的 .NET Framework 于 2002 年初首次发布。 从那以后,许多更新和更多功能随之推出。 经过多年的改进和新功能积聚,最初的 .NET Framework(特别是关键代码库)有了显著增长。
2002 年之后,Microsoft 致力于开发具有跨平台兼容性的 .NET 版本。 其目标是允许开发人员编写一个基本代码,并可跨 macOS、Linux 和 Windows 操作系统使用它。
通过不懈的努力,.NET Core 于 2014 年左右推出。 Microsoft 维护着最初的 .NET Framework,但新功能和改进是为 .NET Core 保留的。 “Core”稍后从名称中删除。 之后推出的主要版本是 .NET 5、.NET 6、.NET 7、.NET 8 等。 这些版本通常在每年 11 月发布。
"生态系统”描述了应用程序开发环境及其周围社区的多方面领域。 这些方面共同构成了一个令人信服的理由,解释了为何要在学习 .NET 和生成.NET 应用程序方面投入精力。
当我们在喜爱的IDE中编写代码时,第一个检测我们代码的就是IDE(词法分析),然后,编译成目标文件和链接到动态/静态库或可执行文件进行再次检查(语法分析),最后一次检查是运行时检查。托管环境的共同特点是:编译器不直接编译成机器码,而是中间代码,在.NET中称为MSIL - Microsoft Intermediate Language,Java是字节码(Bytecode)
在那之后,在运行时JIT(Just In Time)编译器将MSIL翻译成机器码,这意味着我们的代码在真正使用的时候才被解析,这允许在CLR(公共语言运行时)预编译和优化我们的代码,实现程序性能的提高,但增加了程序的启动时间。
在我们运行代码之前,必须先对其进行编译。 .NET 编译器是一个将源代码(可用任何支持的编程语言)转换为可移植语言(称为中间语言 (IL))的程序。 .NET 编译器将 IL 代码保存到名为“.NET 程序集”的文件中。 通过将代码编译为中间格式,无论在哪里运行代码(Windows 或 Linux,32 位或 64 位计算机硬件),都可以使用相同的代码库。
.NET 运行时是编译后的 .NET 程序集的执行环境。 换句话说,当应用程序在主机操作系统上运行时,.NET 运行时执行和管理该应用程序。 稍后我们将详细讨论 .NET 运行时的功能。
所有软件都是分层生成的,这意味着软件在计算机的不同抽象层次上运行:
代码库将特定用途的功能封装到单个程序集中。 对于 .NET,可以使用数千个库。 这些库可以是第一方的,也可以是第三方的,可以是商业的,也可以是开源的。 这些库提供了一系列可在应用程序中使用的功能。 只需引用这些程序集并调用所需的方法。 作为开发人员,我们可以使用这种方法在其他软件开发人员的工作之上生成应用程序。 由于无需自己生成和维护每个功能,因此可以节省我们的时间和精力。
应用程序框架结合了几个相关的库、初学者项目、文件模板、代码生成器以及其他工具。 我们可以使用这些资源为特定目的生成整个应用程序。 这些应用程序框架称为“应用模型”。 例如,.NET 应用程序框架可用于 Web 开发、桌面和移动开发以及游戏开发等常用应用模型。
可以直接安装 .NET SDK,也可以安装 Visual Studio 2022。 .NET SDK 预安装了一组全面的库和应用程序框架,称为“基类库”。 我们可以在程序中使用此代码库,无需考虑要生成的平台或应用模型。
对于其他第三方库,我们使用 NuGet 等包管理器从包存储库(如 NuGet 库)中查找并集成代码库。
应用模型 | 框架 | 说明 |
---|---|---|
Web | ASP.NET Core | 用于生成服务器端逻辑的框架。 |
Web | ASP.NET Core MVC | 用于为网页或 Web API 生成服务器端逻辑的框架。 |
Web | ASP.NET Core Razor Pages | 用于生成服务器生成的 HTML 的框架。 |
Web 客户端 | Blazor | Blazor 是 ASP.NET Core 的一部分。 它的两种模式允许通过套接字进行文档对象模型 (DOM) 操作,作为运行服务器端代码的通信工具,或者作为在浏览器上运行已编译 C# 的 WebAssembly 实现。 |
桌面 | .NET for Mac | 允许 .NET 开发人员使用本机 UI 和 API 访问生成适用于 Mac 设备的应用。 |
桌面 | WinForms | 用于生成“战舰灰色”Windows 风格应用程序的框架。 |
桌面 | Windows Presentation Foundation (WPF) | 一个框架,用于生成符合不同外形规格的动态桌面应用程序。 WPF 允许外形元素在丰富的动画库的帮助下执行移动、淡出、滑动和其他效果。 |
移动 | .NET for Android | 允许 .NET 开发人员使用本机 UI 和 API 访问生成适用于 Android 设备的应用。 |
移动 | .NET for iOS | 允许 .NET 开发人员使用本机 UI 和 API 访问生成适用于 iOS 和 iPadOS 的应用。 |
多平台应用 UI | .NET MAUI | 使用本机 UI 从单个共享代码库生成适用于 iOS、Android、Mac 和 Windows 的应用以及访问本机 API 的首要方法。 |
.NET 还支持常用的第三方及开源游戏开发环境和 Unity 等引擎。
软件开发人员依赖工具来编写代码、添加对代码库的引用、编译代码和调试代码。 本部分介绍了几种用于生成 .NET 应用程序的 .NET 工具。
Visual Studio 2022: Microsoft 旗舰开发环境, 数百万开发人员使用它来生成 .NET 应用程序。 包含菜单、窗口、可视化设计器、对话框和向导的图形用户界面可引导开发人员完成应用程序开发过程。 Visual Studio 2022 提供三个版本:社区版、专业版和企业版。 每个版本都包含不同的工具,并且授权用于不同的目的。
Visual Studio Code : Microsoft 旗舰代码编辑器,它支持多种编程语言,并且在 Windows、Mac 和 Linux 上受支持。 C# 开发工具包扩展为 Visual Studio Code 带来了改进的编辑器优先 C# 开发体验,并通过对解决方案资源管理器、项目系统、测试增强功能和资源管理器、AI 辅助开发的支持增强了 .NET 项目的处理体验,可为代码导航、重构、语义感知等同类最佳的 C# 语言功能提供强大的语言服务。
更喜欢命令行工作流的开发人员可以将 Visual Studio Code(世界上最常用的代码编辑器)与 .NET 命令行接口(也称为 .NET CLI)结合使用。
学会了如何基于一个应用模型来生成应用程序后,我们就可以很容易地应用所学的知识来生成其他应用程序,即使它使用不同的应用模型。 例如,学会了如何生成 Web 应用程序后,你的 .NET 技能就转化为生成移动应用。重新利用知识可以减少学习新编程模型或语言所需的时间投入。 当你应对新挑战时,我们的团队会节省时间和开销。
由于多种原因,.NET 在企业中很受欢迎。 优点包括其生态系统及其与其他 Microsoft 产品(包括 Azure 云服务和本地服务器产品)的集成。 此外,.NET 是一个强类型系统,因此它可以避免在松散类型系统中出现的许多 bug。 开发人员可以选择在 C# 中使用基于对象的范例,或者在 F# 中使用基于函数的范例。 它们使用最适合其需要解决的问题类型的语言。
由于 .NET 长期以来基于客户反馈和遥测对语言、API 和工具进行设计改进,因此它在小型项目中也很受欢迎。 借助 .NET,可以快速开发出功能齐全的软件,用于原型制作。 此外,.NET 可以在成本较低的硬件和云服务上运行。 其性能也优于其他热门平台,因此非常适合初创企业。
用于 .NET 的 Azure SDK 允许开发人员预配和管理 Azure 资源。 另外,Azure 应用服务和 Azure Functions 可以托管用 .NET 语言生成的应用程序。
ML.NET 是适用于 .NET 语言的免费机器学习库。 它支持基于模型的机器学习分析和预测功能。
可使用 .NET 生成适用于 IoT 设备和场景的 IoT 应用程序。 IoT 应用程序通常与需要使用常规用途 I/O (GPIO) 引脚、串行端口或类似硬件的传感器、显示器和输入设备交互。 例如,我们可以找到用于处理像 Raspberry Pi 和 HummingBoard 等常用板的库。
有时,人们认为 C# 编程语言就是 .NET。 但是,C# 和 .NET 是截然不同的。 C# 是一种编程语言语法。 作为语法,我们可以引用和调用 .NET 代码库或程序集中定义的方法。
根据 JetBrains 发布的《2023 开发者生态系统现状》报告显示,79% 的 C# 开发人员使用 Windows。.NET 项目中使用 C# 的用户数高达 99%。
“C# 将继续存在,甚至可能很快超过 Java”, TIOBE 社区预测道。