C#语言发展史

C#语言发展史

起源
在.NET Framework开发期间,其类库最初是使用一种被称为Simple Managed C(SMC/简单托管C)的编译系统开发的。到了1999年初,安德斯·海尔斯伯格成立一个团队开发一个被称为Cool的程序语言,名称取自“C-like Object Oriented Language”, 微软曾经考虑过保留这个名字,但是由于商标等原因在2000年七月的开发者大会上公布.NET项目时将名称改为C#。所以安德斯·海尔斯伯格就成了C#之父,同时他也是C# 首席设计师和微软首席架构师。
C#语言发展史_第1张图片

C#之父Anders Hejlsberg/安德斯·海尔斯伯格

安德斯·海尔斯伯格(Anders Hejlsberg)是一个编程天才,1960年12月2日出生于丹麦哥本哈根,曾在丹麦科技大学学习工程学,大学期间为MS-DOS和CP/M设计了Pascal编译器,Borland买下该编译器改称Turbo Pascal。1989年他作为首席工程师加入Borland。在Borland期间他领导开发了Delphi和Turbo Pascal,所以他也是Turbo Pascal和Delphi之父。 1996年在比尔盖茨亲自邀请并使用“巨额”条件的诱惑下,安德斯离开Borland加入微软,加入微软之后首先主持了Visual J++的开发工作,后来由于在Java开发工具授权问题上和Sun公司的纠纷,微软停止了Visual J++的后续开发。之后作为.Net概念的发起人之一,安德斯·海尔斯伯格被任命为微软.Net的首席架构师,主持.Net的开发工作。
名字
C# 读作 c sharp ['siːˈʃɑrp],关于C#这个名字,它的历史其实比.NET更早,微软首次使用这个名字是在1988年设计一种C语言变体的时候,虽然这个项目没有完成但是这个名字流传了下来。

“C sharp"这个名字受到了五线谱中的升号#(sharp)的启发,在五线谱中#表示升半个音。这和C++类似,”++"在代码中代表了+1。同样的#符号也可以看做是4个“+”号,可以看做是C++的“+1”。

五线谱中的升号

大部分人可能不知道C#吉祥物Andy名字取自Anders Hejlsberg,下面是我在网上唯一能找到的相关图片。不过该吉祥物于2004年退休。

幸好这个吉祥物退休了,真的不好看

开源
2014年11月12日,微软宣布.NET平台全技术栈开源并且将让.NET运行在Linux和MacOS上,并且会通过.NET Foundation(.NET基金会)来与社区密切合作在未来改进.NET。现在你可以在GitHub上找到所有.NET平台组件的开源项目。其中实现C#的Roslyn项目属于Apache License 2.0授权,其他.NET平台组件如CLR与corefx(”标准库“)为MIT授权。
特点
C# 是一种多重范式,包含了强类型,指令式,声明式,函数式,泛型,面向对象(基于类型)以及面向组件的编程语言,它是微软为了推动.net平台而为CLI(公共语言基础结构/common language infrastructure)开发的。

C# 同时也是ECMA和ISO等国际化标准组织的标准
版本历史及主要特性

版本特性
2005年11月,C# 2.0
 Generics/泛型
 Partial types/部分类型
 Anonymous methods/匿名方法
 Iterators/迭代器
 Nullable types/可空类型
 Getter/setter separate accessibility/属性访问器可访问性
 Method group conversions (delegates)/方法组转化
 Co- and Contra-variance for delegates/委托中的协变和逆变
 Static classes/静态类
 Delegate inference/委托推断

2007年11月,C# 3.0
 Implicitly typed local variables/隐式类型的局部变量
 Object and collection initializers/对象与集合初始化器
 Auto-Implemented properties/自动属性
 Anonymous types/匿名类型
 Extension methods/扩展方法
 Query expressions/查询表达式
 Lambda expression/Lambda表达式
 Expression trees/表达式树
 Partial methods/局部方法
2010年10月,C# 4.0
 Dynamic binding/动态绑定
 Named and optional arguments/命名参数与可选参数
 Generic co- and contravariance/泛型逆变与协变
 Embedded interop types (“NoPIA”)/嵌入互操作类型
2012年8月,C# 5.0
 Asynchronous methods/异步方法
 Caller info attributes/调用方信息attributes(特性)
2015年7月,C# 6.0
 Compiler-as-a-service (Roslyn) /编译即服务(Roslyn)
 Import of static type members into namespace/支持仅导入类中的静态成员
 Exception filters/异常过滤器
 Await in catch/finally blocks/在catch/finally语句中使用await
 Auto property initializers/自动属性初始化
 Default values for getter-only properties/设置只读属性的默认值
 Expression-bodied members/支持以表达式为主体的成员方法和只读属性
 Null propagator (null-conditional operator, succinct null checking)/Null条件操作符
 String interpolation/字符串插值
 nameof operator/nameof操作符
 Dictionary initializer/字典初始化

2017年3月,C# 7.0
 Out variables/out变量使用改进
 Pattern matching/模式匹配
 Tuples/元组
 Deconstruction/元组解析
 Local functions/本地方法
 Digit separators/数字分隔符
 Binary literals/二进制字面量
 Ref returns and locals/引用返回值和局部变量
 Generalized async return types/async中使用泛型返回类型
 Expression bodied constructors and finalizers/表达式构造与析构函数
 Expression bodied getters and setters/表达式属性
 Throw can also be used as expression/throw可以在表达式中使用
2017年8月,C# 7.1
 Async main/异步main方法
 Default literal expressions/default关键字类型省略
 Inferred tuple element names/元组元素名称推断
2017年11月,C# 7.2
 Reference semantics with value types/新的值类型引用语意
 Non-trailing named arguments/命名参数不需放在尾部
 Leading underscores in numeric literals/二进制值支持下划线
 private protected access modifier/新的可访问性修饰符private protected
2018年5月,C# 7.3
 Access fixed fields without pinning/可在不fixed(pinning)的情况下访问fixed字段
 Reassignreflocal variables/可重新赋值的ref局部变量
 Use initializers onstackallocarrays/栈分配数组
 Usefixedstatements with any type that supports a pattern/增加fixed语句支持类型
 Additional generic constraints/泛型约束增强
 Testand!=with tuple types/元组比较(使用和!=)
 Use expression variables in more locations/可在更多的地方使用表达式变量
 Attach attributes to the backing field of auto-implemented properties/支持为自动属性的隐藏字段添加特性(Attribute)
 Method resolution when arguments differ by in has been improved/方法解析增强
 Overload resolution now has fewer ambiguous cases/重载解析增强
2019 年 9 月,C# 8.0
 Readonly 成员
 默认接口方法
 模式匹配增强功能:
 switch 表达式
 属性模式
 元组模式
 位置模式
 Using 声明
 静态本地函数
 可处置的 ref 结构
 可为空引用类型
 异步流
 索引和范围
 Null 合并赋值
 非托管构造类型
 嵌套表达式中的 Stackalloc
 内插逐字字符串的增强功能
2020 年 11 月,C# 9.0
 记录
 仅限 Init 的资源库
 顶级语句
 模式匹配增强:关系模式和逻辑模式
 性能和互操作性
 本机大小的整数
 函数指针
 禁止发出 localsinit 标志
 模块初始值设定项
 分部方法的新功能
 调整和完成功能
 目标类型的 new 表达式
 static 匿名函数
 目标类型的条件表达式
 协变返回类型
 扩展 GetEnumerator 支持 foreach 循环
 Lambda 弃元参数
 本地函数的属性

2021 年 11 月, C# 10.0
 记录结构
 结构类型的改进
 内插字符串处理程序
 global using 指令
 文件范围的命名空间声明
 扩展属性模式
 对 Lambda 表达式的改进
 可使用 const 内插字符串
 记录类型可密封 ToString()
 改进型明确赋值
 在同一析构中可同时进行赋值和声明
 可在方法上使用 AsyncMethodBuilder 属性
 CallerArgumentExpression 属性
 增强的 #line pragma
2022 年 11 月,C#11.0
 原始字符串字面量
 泛型数学支持
 泛型属性
 UTF-8 字符串字面量
 字符串内插表达式中的换行符
 列表模式
 文件本地类型
 必需的成员
 自动默认结构
 常量 string 上的模式匹配 Span
 扩展的 nameof 范围
 数值 IntPtr
 ref 字段和 scoped ref
 改进了方法组向委托的转换
 警告波 7

你可能感兴趣的:(c#,开发语言)