C# 夺冠,微软.NET前途光明!

本文以C# 摘得 “2023 年度编程语言“称号为背景,介绍.NET的历史、生态及发展势头,该文章是本人C#专栏的第一篇文章。

这里写目录标题

  • 1.C#摘得"2023年度编程语言"奖项
  • 2.什么是.NET?
    • 2.1.NET简史
    • 2.2.NET是用于应用程序开发的生态系统
    • 2.2.1.使用 .NET 语言和编译器在 .NET 运行时中运行应用程序
    • 2.2.2.使用 .NET 应用程序框架和库来利用预生成功能
      • .NET生态的主要应用模型
    • 2.2.3. .NET 开发工具(集成开发环境)
  • 3.何时使用.NET?
      • (1) 看重工作效率
      • (2)企业级应用开发
      • (3)原型制作、初创企业和小规模应用程序
      • (4)云和AI应用程序
      • (5)IoT 应用程序
  • 4.C#与.NET的关系
  • 5.NET生态系统发展势头

1.C#摘得"2023年度编程语言"奖项

2024 年伊始,TIOBE 最新的 1 月榜单重磅发布,C# 首次荣获年度编程语言奖。

在这里插入图片描述

对此,TIOBE 软件公司首席执行官 Paul Jansen 表示,“二十多年来,C# 一直稳居前十名,如今,它正在追赶 Python、C、C++、Java 四大语言的脚步,成为一年内涨幅最大的语言(+1.43%),赢得了当之无愧的奖项。”

2.什么是.NET?

当有人使用术语“.NET”时,其含义在很大程度上取决于上下文。换句话说,.NET 是共同创建用于生成应用程序的强大环境的许多部件和人员的集合。

2.1.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 月发布。

2.2.NET是用于应用程序开发的生态系统

"生态系统”描述了应用程序开发环境及其周围社区的多方面领域。 这些方面共同构成了一个令人信服的理由,解释了为何要在学习 .NET 和生成.NET 应用程序方面投入精力。

2.2.1.使用 .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 运行时的功能。

2.2.2.使用 .NET 应用程序框架和库来利用预生成功能

所有软件都是分层生成的,这意味着软件在计算机的不同抽象层次上运行:

  • 在最低层,软件直接与计算机硬件通信。 它控制着主板、处理器、内存和硬盘驱动器上的数据流。
  • 在下一层,软件支持最终用户通过操作系统提供指令。
  • 在下一层,.NET 等软件提供开发和运行应用程序的方法。
  • 在下一层,可以借助应用程序框架和功能库,使用比以前更简单的开发方法,快速生成丰富的应用程序。

代码库将特定用途的功能封装到单个程序集中。 对于 .NET,可以使用数千个库。 这些库可以是第一方的,也可以是第三方的,可以是商业的,也可以是开源的。 这些库提供了一系列可在应用程序中使用的功能。 只需引用这些程序集并调用所需的方法。 作为开发人员,我们可以使用这种方法在其他软件开发人员的工作之上生成应用程序。 由于无需自己生成和维护每个功能,因此可以节省我们的时间和精力。

应用程序框架结合了几个相关的库、初学者项目、文件模板、代码生成器以及其他工具。 我们可以使用这些资源为特定目的生成整个应用程序。 这些应用程序框架称为“应用模型”。 例如,.NET 应用程序框架可用于 Web 开发、桌面和移动开发以及游戏开发等常用应用模型。

可以直接安装 .NET SDK,也可以安装 Visual Studio 2022。 .NET SDK 预安装了一组全面的库和应用程序框架,称为“基类库”。 我们可以在程序中使用此代码库,无需考虑要生成的平台或应用模型。

对于其他第三方库,我们使用 NuGet 等包管理器从包存储库(如 NuGet 库)中查找并集成代码库。

.NET生态的主要应用模型

应用模型框架说明
WebASP.NET Core用于生成服务器端逻辑的框架。
WebASP.NET Core MVC用于为网页或 Web API 生成服务器端逻辑的框架。
WebASP.NET Core Razor Pages用于生成服务器生成的 HTML 的框架。
Web 客户端BlazorBlazor 是 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 等引擎。

2.2.3. .NET 开发工具(集成开发环境)

软件开发人员依赖工具来编写代码、添加对代码库的引用、编译代码和调试代码。 本部分介绍了几种用于生成 .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)结合使用。

3.何时使用.NET?

(1) 看重工作效率

学会了如何基于一个应用模型来生成应用程序后,我们就可以很容易地应用所学的知识来生成其他应用程序,即使它使用不同的应用模型。 例如,学会了如何生成 Web 应用程序后,你的 .NET 技能就转化为生成移动应用。重新利用知识可以减少学习新编程模型或语言所需的时间投入。 当你应对新挑战时,我们的团队会节省时间和开销。

(2)企业级应用开发

由于多种原因,.NET 在企业中很受欢迎。 优点包括其生态系统及其与其他 Microsoft 产品(包括 Azure 云服务和本地服务器产品)的集成。 此外,.NET 是一个强类型系统,因此它可以避免在松散类型系统中出现的许多 bug。 开发人员可以选择在 C# 中使用基于对象的范例,或者在 F# 中使用基于函数的范例。 它们使用最适合其需要解决的问题类型的语言。

(3)原型制作、初创企业和小规模应用程序

由于 .NET 长期以来基于客户反馈和遥测对语言、API 和工具进行设计改进,因此它在小型项目中也很受欢迎。 借助 .NET,可以快速开发出功能齐全的软件,用于原型制作。 此外,.NET 可以在成本较低的硬件和云服务上运行。 其性能也优于其他热门平台,因此非常适合初创企业。

(4)云和AI应用程序

用于 .NET 的 Azure SDK 允许开发人员预配和管理 Azure 资源。 另外,Azure 应用服务和 Azure Functions 可以托管用 .NET 语言生成的应用程序。

ML.NET 是适用于 .NET 语言的免费机器学习库。 它支持基于模型的机器学习分析和预测功能。

(5)IoT 应用程序

可使用 .NET 生成适用于 IoT 设备和场景的 IoT 应用程序。 IoT 应用程序通常与需要使用常规用途 I/O (GPIO) 引脚、串行端口或类似硬件的传感器、显示器和输入设备交互。 例如,我们可以找到用于处理像 Raspberry Pi 和 HummingBoard 等常用板的库。

4.C#与.NET的关系

在这里插入图片描述

有时,人们认为 C# 编程语言就是 .NET。 但是,C# 和 .NET 是截然不同的。 C# 是一种编程语言语法。 作为语法,我们可以引用和调用 .NET 代码库或程序集中定义的方法。

在这里插入图片描述

根据 JetBrains 发布的《2023 开发者生态系统现状》报告显示,79% 的 C# 开发人员使用 Windows。.NET 项目中使用 C# 的用户数高达 99%。

5.NET生态系统发展势头

  • .NET重要部分通过开源方式开发,87% 的参与者都不属于 Microsoft
  • 有超过 500 万的 .NET 开发人员!
  • Stack Overflow 投票结果一直表明,.NET Core 和 .NET 是最受欢迎的框架。
  • 学生群体喜欢使用 .NET,在刚接触 .NET 开发的人员中,有 40% 都是学生。
  • 适用于 .NET 和 ASP.NET 的 GitHub 存储库位列成长速度最快的前 30 名开源软件 (OSS) 项目之中。
  • GitHub 将 C# 列为五大热门编程语言之一,根据 2023 年的 TIOBE 编程社区指数,该语言越来越受欢迎。
  • 根据 TechEmpower 基准(一组独立的开源 Web 性能基准测试集,可以测量几十种语言和应用程序框架),.NET 拥有世界上最快的 Web 框架。

“C# 将继续存在,甚至可能很快超过 Java”, TIOBE 社区预测道。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2778270.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Java EE初阶十二】网络初识

1. 网络发展史 网络发展的几个主要时期: 单机时代->局域网时代->广域网时代->移动互联网时代 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互…

【Linux系统学习】6.Linux系统软件安装

实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,进行练习虽然可以基础掌握这些命令和技巧的使用,但是并没有一些具体的实…

LLM之RAG实战(二十五)| 使用LlamaIndex和BM25重排序实践

本文,我们将研究高级RAG方法的中的重排序优化方法以及其与普通RAG相比的关键差异。 一、什么是RAG? 检索增强生成(RAG)是一种复杂的自然语言处理方法,它包括两个不同的步骤:信息检索和生成语言建模。这种方…

YOLOv8算法改进【NO.101】引入最新的损失函数Focaler-IoU

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 第一…

C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录 一、使用的方法 1.自定义插入方法 2.使用List.Add(T) 方法 二、实例 1.示例1:List.Add(T) 方法 2.示例:自定义插入方法 一、使用的方法 1.自定义插入方法 首先需要定义一个一维数组,然后修改数组的长度(这里使用Length属性获取…

统计数字出现次数的数位动态规划解法-数位统计DP

在处理数字问题时,我们经常遇到需要统计一定范围内各个数字出现次数的情况。这类问题虽然看起来简单,但当数字范围较大时,直接遍历统计的方法就变得不再高效。本文将介绍一种利用数位动态规划(DP)的方法来解决这一问题,具体来说,是统计两个整数a和b之间(包含a和b)所有…

题目练习(生死时速2.0版)

题目一(Before an Exam) 题意翻译 题目背景 明天皮特将要考生物。他并不很喜欢生物,但在 d 天前他得知他将不得不参加此次考试。皮特严厉的父母勒令他立即复习,因此他在第 i 天将需要学习不少于 minTimei​ 小时,不…

Java:JDK8新特性(Stream流)、File类、递归 --黑马笔记

一、JDK8新特性(Stream流) 接下来我们学习一个全新的知识,叫做Stream流(也叫Stream API)。它是从JDK8以后才有的一个新特性,是专业用于对集合或者数组进行便捷操作的。有多方便呢?我们用一个案…

备战蓝桥杯---动态规划之经典背包问题

看题: 我们令f[i][j]为前i个物品放满容量为j的背包的最大价值。 f[i][j]max(f[i-1][j],f[i-1][j-c[i]]w[i]); 我们开始全副成负无穷。f[0][0]0;最后循环最后一行求max; 负无穷:0xc0c0c0c0;正无穷:0x3f3f3f3f 下面是v12,n6的图示&#xff…

vue2源码调试,在vscode中直接调试vue源代码操作指南

依赖安装 使用 yarn 安装所有依赖 package.json 启动 添加配置 在dev 命令里 加上 –sourcemap,便于源码调试 在源码根目录中运行npm run dev 运行npm run dev 在dist文件夹下生成 vue.js文件 新建一个test目录,并创建test.html文件用于测试 m在html文件中使…

【Linux】构建模块

🔥博客主页:PannLZ 🎋系列专栏:《Linux系统之路》 🥊不要让自己再留有遗憾,加油吧! 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…

Codeforces Round 886 (Div. 4)补题

To My Critics&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;现有一个三位数&#xff0c;问能否从中抽取两个数使得和大于等于10. 思路&#xff1a;排个序&#xff0c;取大的两个即可。 #include<bits/stdc.h> using namespace std; int mai…

Qt网络编程-ZMQ的使用

不同主机或者相同主机中不同进程之间可以借助网络通信相互进行数据交互&#xff0c;网络通信实现了进程之间的通信。比如两个进程之间需要借助UDP进行单播通信&#xff0c;则双方需要知道对方的IP和端口&#xff0c;假设两者不在同一主机中&#xff0c;如下示意图&#xff1a; …

第4章——深度学习入门(鱼书)

第4章 神经网络的学习 本章的主题是神经网络的学习。这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。本章中&#xff0c;为了使神经网络能进行学习&#xff0c;将导入损失函数这一指标。而学习的目的就是以该损失函数为基准&#xff0c;找出能使它的值达到最…

C++中类的6个默认成员函数【构造函数】 【析构函数】

文章目录 前言构造函数构造函数的概念构造函数的特性 析构函数 前言 在学习C我们必须要掌握的6个默认成员函数&#xff0c;接下来本文讲解2个默认成员函数 构造函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c…

动态内存经典笔试题分析

1.代码1 void GetMemory(char *p) { p (char *)malloc(100); } void Test(void) { char *str NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); } int main&#xff08;&#xff09; { Test&#xff08;&#xff09;&#xff1b; return 0&#x…

Qlik Sense : Lookup函数

LookUp - 脚本函数 Lookup() 用于查找已经加载的表格&#xff0c;并返回与在字段 match_field_name 中第一次出现的值 match_field_value 对应的 field_name 值。表格可以是当前表格或之前加载的其他表格。 语法&#xff1a; lookup(field_name, match_field_name, match_…

2024牛客寒假算法基础集训营3

前言 感觉有些题是有难度&#xff0c;但是是我花时间想能想的出来的题目&#xff0c;总体来说做的很爽&#xff0c;题目也不错。个人总结了几个做题技巧&#xff0c;也算是提醒自己。 1.多分类讨论 2.从特殊到一般&#xff0c;便于找规律。例如有一组数&#xff0c;有奇数和…

[word] word自定义编号格式怎么设置 #经验分享#职场发展#职场发展

word自定义编号格式怎么设置 在Word文档的编辑中&#xff0c;经常会给段落添加编号&#xff0c;但是在编号的使用过程中我们会遇到很多问题&#xff0c;今天给大家分享word自定义编号格式怎么设置&#xff0c;希望能帮到您&#xff01; 1.如何自定义编号格式&#xff1f; 点击…

【第二十三课】最小生成树:prime 和 kruskal 算法(acwing858,859 / c++代码 )

目录 前言 Prime算法--加点法 acwing-858 代码如下 一些解释 Kruskal算法--加边法 acwing-859 并查集与克鲁斯卡尔求最小生成树 代码如下 一些解释 前言 之前学最短路的时候&#xff0c;我们都是以有向图为基础的&#xff0c;当时我们提到如果是无向图&#xf…