C#语言发展历史

news2024/11/6 17:19:30

前言

        C#是微软公司在2000年6月发布的一种新的编程语言,主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行。

        C#最初有个更酷的名字,叫做COOL。微软从1998年12月开始了COOL项目,直到2000年2月,COOL被正式更名为C#。

        在1998年,Delphi语言的设计者安德斯·海尔斯伯格带领着Microsoft公司的开发团队,开始了第一个版本C#语言的设计。在2000年9月,国际信息和通信系统标准化组织为C#语言定义了一个Microsoft公司建议的标准。最终C#语言在2001年得以正式发布。

1.C# 1.0

        发布于2002年1月

        和 Visual Studio .NET 2002 一起发布的 C# 版本 1.0 非常像 Java。其目标是成为一种“简单、现代、通用的面向对象的语言”。当时,看起来像 Java 意味着它实现了早期的设计目标。

        不过如果现在回顾 C# 1.0,你会觉得有点晕。 它没有习以为常的内置异步功能和以泛型为中心的巧妙功能。 其实它完全不具备泛型。LINQ尚不可用。 这些新增内容需 要几年才能推出。

        与现在的 C# 相比,C# 1.0 版少了很多功能。 你会发现自己的代码很冗长。 不过凡事总要有个开始。 在 Windows 平台上,C# 1.0 版是 Java 的一个可行的替代之选。

2.C# 1.2

        发布于2003年4月

        随 Visual Studio .NET 2003 一起提供的 C# 版本 1.2。 它对语言做了一些小改进。 最值得注意的是,从此版本开始,当 IEnumerator 实现 IDisposable 时,foreach 循环中生成的代码会在 IEnumerator上调用 Dispose。

3.C# 2.0

        发布于2005年11月

        C# 2.0 新增了泛型、分部类型、匿名方法、可为null的值类型、迭代器、协变和逆变、getter/setter 单独可访问性、方法组转换(委托)、静态类、委托推断等。

        虽然 C# 一开始是通用的面向对象 (OO) 语言,但 C# 2.0 版很快改变了这一点。 通过泛型,类型和方法可以操作任意类型,同时保持类型安全性。

        C# 2.0 版引入了迭代器。 简单来说,迭代器允许使用 foreach 循环来检查 List (或其他可枚举类型)中的所有项。 拥有迭代器是该语言最重要的一部分,显著提升了语言的可读性以及人们推出代码的能力。

4.C# 3.0

        发布于2007年11月

        C# 3.0 版和 Visual Studio 2008 一起发布于 2007 年下半年,但完整的语言功能是在 .NETFramework 3.5 版中发布的。 此版本标示着 C# 发展过程中的重大更改。 C# 成为了真正强大的编程语言。

        此 C# 版本的杀手锏功能是查询表达式,也就是语言集成查询 (LINQ)。 LINQ 的构造可以建立在更细微的视图检查表达式树、Lambda 表达式以及匿名类型的基础上。 不过无论如何 C# 3.0 都提出了革命性的概念。 C# 3.0 开始为 C# 转变为面向对象/函数式混合语言奠定基础。

5.C# 4.0

        发布于2010年4月

        C# 4.0 版随 Visual Studio 2010 一起发布,主要功能是引入 dynamic 关键字。通过使用 dynamic 关键字,可以创建和动态类型语言(例如JavaScript)类似的构造。

6.C# 5.0

        发布于2012年8月

        C# 版本 5.0 随 Visual Studio 2012 一起发布,是该语言有针对性的一个版本。 对此版本中所做的几乎所有工作都归入另一个突破性语言概念:适用于异步编程的 async 和await 模型。

7.C# 6.0

        发布于2015年7月

        版本 6.0 随 Visual Studio 2015 一起发布,发布了很多使得 C# 编程更有效率的小功能:静态导入、异常筛选器、自动属性初始化表达式、字符串内插、nameOf运算符、索引初始化表达式、Catch/Finally 块中的 Await、仅限 getter 属性的默认值。

        发布了 Roslyn 编译器即服务。

8.C# 7.0

        发布于2017年3月

        C# 7.0 版已与 Visual Studio 2017 一起发布。 此版本继承和发展了 C# 6.0。缩减了使用 out 关键字的变量声明,并通过元组实现了多个返回值。

9.C# 7.1

        发布于2017年8月

        此版本增加了语言版本选择配置元素、三个新的语言功能和新的编译器行为。

        此版本中新增的语言功能包括:

        asyncMain 方法:应用程序的入口点可以含有 async 修饰符。

        default 文本表达式:在可以推断目标类型的情况下,可在默认值表达式中使用默认文本表达式。

        推断元组元素名称:在许多情况下,可通过元组初始化来推断元组元素的名称。

        泛型类型参数的模式匹配:可以对类型为泛型类型参数的变量使用模式匹配表达式。

最后,编译器有 -refout 和 -refonly 两个选项,可用于控制引用程序集生成。

10.C# 7.2

        发布于2017年11月

11.C# 7.3

        发布于2018年5月

12.C# 8.0

        发布于2019年9月

        C# 8.0 版是专门面向 .NET C# Core 的第一个主要 C# 版本。 一些功能依赖于新的公共语言运行时 (CLR) 功能,而其他功能则依赖于仅在 .NET Core 中添加的库类型。

13.C# 9.0

        发布于2020年11月

        C# 9 随 .NET 5 一起发布。 它是面向 .NET 5 版本的任何程序集的默认语言版本。它包含以下新功能和增强功能:记录、顶级语句、模式匹配增强:关系模式和逻辑模式等。

        C# 9 版本继续致力于让 C# 成为一种新式通用编程语言。 功能继续支持新式工作负载和应用程序类型。

14.C# 10.0

        发布于2021年11月

15.C# 11.0

        发布于2022年11月

16.C# 12.0

        发布于2023年11月

C# 12 中增加了以下功能:

  • 主构造函数: 现在可以在任何 class 和 struct 中创建主构造函数。 主构造函数不再局限于 record 类型。
  • 集合表达式: 一种用于指定集合表达式的新语法,包括展开运算符 ( .. ),可展开任何集合。
  • 内联数组: 使用内联数组,你可以创建固定大小的 struct 类型数组。
  • Lambda 表达式中的可选参数: 可以为 Lambda 表达式的参数定义默认值。
  • ref readonly 参数: ref readonly 参数可以让可能使用 ref 参数或 in 参数的 API 更清晰。
  • 创建任何类型的别名: 可以使用 using 别名指令创建任何类型的别名,而不仅仅是命名类型。
  • 试验性属性: 指示试验性功能。
  • 拦截器: 已作为预览功能发布。

        总体而言,C# 12 提供的新功能可让你更高效地编写 C# 代码。 你已经知道的语法可以在更多地方使用。 其他语法可实现相关概念的一致性。

17.C# 13.0(目前最新版)

        发布于2024年11月

        C# 13 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 预览版 SDK 尝试这些功能。

  • 新的转义序列 - \e:可以使用 \e 作为 ESCAPE 字符 Unicode U+001B 的字符文本转义序列。
  • 方法组自然类型改进:此功能对涉及方法组的重载解析进行了少量优化。
  • 对象初始值设定项中的隐式索引器访问:对象初始值设定项表达式中现在允许隐式“从末尾开始”索引运算符 ^ 。

在 C# 13 之前的版本中,不能在对象初始值设定项中使用 ^ 运算符。

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

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

相关文章

【MySQL初阶】--- MySQL在Ubuntu环境下安装

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: MySQL 本篇博客博主采用的是ubuntu 22.04的系统按照MySQL,且在root用户下安装。 🏠 MySQL安装 1. 更新系统的软件包列表 sudo a…

Charles简单压力测试

1.接口请求次数,并发量,请求延迟时间均可配置 1.1选中需要进行测试的接口,鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中,选择了1个接口,每次迭代中1个接口同时请求,迭代1000次(…

【大模型LLM面试合集】大语言模型架构_chatglm系列模型

chatglm系列模型 1.ChatGLM 1.1 背景 主流的预训练框架主要有三种: autoregressive自回归模型(AR模型):代表作GPT。本质上是一个left-to-right的语言模型。通常用于生成式任务,在长文本生成方面取得了巨大的成功&a…

从 vue 源码看问题 — 你知道 Hook Event 吗?

前言 在之前的几篇文章中,都有提到 vue 中调用生命周期钩子时是通过 callHook() 方法进行调用的,比如在初始化篇章中调用 beforeCreate 和 created 生命周期钩子方式如下: 那么接下来一起来了解下到底什么是 Hook Event ? Hook Event 是什…

html练习2

实现下列图片的效果 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}#menu {background-color: #0c0048;width: 100%;height: 50px;margin: auto;…

计算机视觉常用数据集Cityscapes的介绍、下载、转为YOLO格式进行训练

我在寻找Cityscapes数据集的时候花了一番功夫&#xff0c;因为官网下载需要用公司或学校邮箱邮箱注册账号&#xff0c;等待审核通过后才能进行下载数据集。并且一开始我也并不了解Cityscapes的格式和内容是什么样的&#xff0c;现在我弄明白后写下这篇文章&#xff0c;用于记录…

Java | Leetcode Java题解之第523题连续的子数组和

题目&#xff1a; 题解&#xff1a; class Solution {public boolean checkSubarraySum(int[] nums, int k) {int m nums.length;if (m < 2) {return false;}Map<Integer, Integer> map new HashMap<Integer, Integer>();map.put(0, -1);int remainder 0;fo…

MATLAB计算朗格朗日函数

1. 朗格朗日函数介绍 朗格朗日函数&#xff08;Lagrange function&#xff09;通常用于优化问题&#xff0c;尤其是带有约束的优化问题。其一般形式为&#xff1a; 其中&#xff1a; f(x) 是目标函数。 是约束条件。 是拉格朗日乘子。 为了编写一个MATLAB代码来计算和绘制…

手机的ip地址是固定的吗?多角度深入探讨

手机的IP地址是否固定&#xff0c;这一问题涉及到网络连接、技术配置以及运营商策略等多个方面。为了全面解答这一问题&#xff0c;我们需要从多个角度进行深入探讨。 首先&#xff0c;明确IP地址&#xff08;Internet Protocol Address&#xff09;的基本概念。IP地址是互联网…

宠物空气净化器推荐,哪款除毛好、噪音小?希喂、352性能对比

大家都有选购宠物空气净化器时在各大品牌里挑挑拣拣、费时费力的体验吧...本以为只要多看点推荐&#xff0c;确定了品牌&#xff0c;就能买到好用的产品&#xff0c;不过实际情况却并非如此。 身为宠物博主&#xff0c;之前用过不少宠物空气净化器&#xff0c;20年还写过几篇测…

`掌握Python-PPTX,让PPt制作变得轻而易举!`

文章目录 掌握Python-PPTX&#xff0c;让PPT制作变得轻而易举&#xff01;背景介绍python-pptx 是什么&#xff1f;如何安装 python-pptx&#xff1f;简单库函数使用方法应用场景常见Bug及解决方案总结 掌握Python-PPTX&#xff0c;让PPT制作变得轻而易举&#xff01; 背景介绍…

【python】OpenCV—Connected Components

文章目录 1、任务描述2、代码实现3、完整代码4、结果展示5、涉及到的库函数6、参考 1、任务描述 基于 python opencv 的连通分量标记和分析函数&#xff0c;分割车牌中的数字、号码、分隔符 cv2.connectedComponentscv2.connectedComponentsWithStatscv2.connectedComponents…

ENSP (虚拟路由冗余协议)VRRP配置

VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虚拟路由冗余协议&#xff09;是一种用于提高网络可用性和可靠性的协议。它通过在多个路由器之间共享一个虚拟IP地址&#xff0c;确保即使一台路由器发生故障&#xff0c;网络依然能够正常运行&#xff0c;防止…

【JS学习】08. web API-事件进阶

Web APIs - 第3天 进一步学习 事件进阶&#xff0c;实现更多交互的网页特效&#xff0c;结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事件委托的实现原理 事件流 事件流是对事件执行过程的描述&#xff0c;了解事件的执行过程有助于加深对事件的理解&…

Hadoop完全分布式环境搭建步骤

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 大数据与数据分析_夏天又到了的博客-CSDN博客 本文介绍Hadoop完全分布式环境搭建方法&#xff0c;这个Hadoop环境用于安装配置Spark。假设读者已经安装好Visual Box 7.0.6虚拟环境与一个CentOS 7虚拟机&#xff08;如果…

H7-TOOL的CAN/CANFD助手增加帧发送成功标识支持, 继续加强完善功能细节

2.27版本固件正式携带此功能&#xff0c;包括之前做的负载率检测和错误信息展示也将集成到这个版本固件中。 对于接收&#xff0c;我们可以直接看到效果&#xff0c;而发送不行&#xff0c;所以打算在发送的地方展示下发送成功标识。CAN发送不像串口&#xff0c;需要等待应答后…

ssm+jsp653基于Javaweb的网上花店系统的设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

操作系统如何执行,他究竟是个什么

硬件中断 所谓硬件中断&#xff0c;其实也是一个执行信号的过程&#xff0c;具体流程如下。 具体要执行什么方法&#xff0c;只需要拿着对应的信号访问中断向量表就就行比如 N就是像cpu发的中断信号。 时钟中断 但是这里面有一个叫做时钟源的东西&#xff0c;其实也是一个外…

音视频入门基础:FLV专题(24)——FFmpeg源码中,获取FLV文件视频信息的实现

一、引言 通过FFmpeg命令可以获取到FLV文件的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、码率、帧率信息&#xff1a; 而由《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》和《音视频入门基础&#xff1a;FLV专…

JMM内存模型(面试回答)

1.什么是JMM JMM就是Java内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下&#xff0c;内存的访问有一定的差异&#xff0c;所以会造成相同的代码运行在不同的系统上会出现各种问题。所以Java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异&…