C#进化极简史
作为.NET平台编程语言中的“老大”C#是大部分.NET开发者选择的语言,本篇我们就来聊聊C#的发展历程。
起源
在.NET Framework开发期间,其类库最初是使用一种被称为Simple Managed C(SMC/简单托管C)的编译系统开发的。到了1999年初,安德斯·海尔斯伯格成立一个团队开发一个被称为Cool的程序语言,名称取自“C-like Object Oriented Language”, 微软曾经考虑过保留这个名字,但是由于商标等原因在2000年七月的开发者大会上公布.NET项目时将名称改为C#。所以安德斯·海尔斯伯格就成了C#之父,同时他也是C# 首席设计师和微软首席架构师。
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的开发工作。2012他宣布了他的新项目TypeScript。
安德斯在《Dr.Dobb's》杂志的2001年西部会议上被授予“Prestigious Excellence in Programming Award”,《Dr.Dobb's》杂志的主编Jonathan Erickson说:“这一荣誉,我们每年只颁给那些在软件开发领域做出非凡贡献的人员,Anders开发的C#和他整个职业生涯中为软件开发所做出的巨大贡献有目共睹,他无愧于这一荣誉!”
现在 C# 是由 C# 语言设计团队与实现该语言的 Roslyn 项目协作设计的,你可以在GitHub上找到他们的repo。
dotnet/csharplanggithub.com/dotnet/csharplang
名字
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授权。
.NET Foundationgithub.com/dotnet
特点
C# 是一种多重范式,包含了强类型,指令式,声明式,函数式,泛型,面向对象(基于类型)以及面向组件的编程语言,它是微软为了推动.net平台而为CLI(公共语言基础结构/common language infrastructure)开发的。
C# 同时也是ECMA和ISO等国际化标准组织的标准,标准规范可以在这里下载ECMA-334 与 ISO/IEC 23270。
版本历史及主要特性
下图是C#各个版本的发行与简要介绍
该图来来自于wikipedia(2018年6月),点击这里查看最新版本。
版本特性:
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/委托推断
Visual Studio 2005 文档下载www.microsoft.com/zh-CN/download/details.aspx?id=55984
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/局部方法
Overview of C# 3.0msdn.microsoft.com/en-us/library/bb308966.aspx
2010年10月,C# 4.0
- Dynamic binding/动态绑定
- Named and optional arguments/命名参数与可选参数
- Generic co- and contravariance/泛型逆变与协变
- Embedded interop types ("NoPIA")/嵌入互操作类型
C# 4.0 - New C# Features in the .NET Framework 4msdn.microsoft.com/en-us/magazine/ff796223.aspx
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/字典初始化
What's New in C# 6 - C# Guidedocs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-6
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可以在表达式中使用
What's New in C# 7.0 - C# Guidedocs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7
2017年8月,C# 7.1
- Async main/异步main方法
- Default literal expressions/default关键字类型省略
- Inferred tuple element names/元组元素名称推断
What's new in C# 7.1docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-1
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
What's new in C# 7.2docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-2
2018年5月,C# 7.3
- Access fixed fields without pinning/可在不fixed(pinning)的情况下访问fixed字段
- Reassign
ref
local variables/可重新赋值的ref局部变量 - Use initializers on
stackalloc
arrays/栈分配数组 - Use
fixed
statements with any type that supports a pattern/增加fixed语句支持类型 - Additional generic constraints/泛型约束增强
- Test
==
and!=
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/重载解析增强
What's new in C# 7.3docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-3
希望通过这篇文章能让大家对C#编程语言有更感性的认识。
注:资料主要来自于维基百科
更新日志:添加7.3特性
发布于 2018-06-14 15:24 ,编辑于 2018-06-15 11:44
[
C#
](//www.zhihu.com/topic/19590712)
[
.NET Core
](//www.zhihu.com/topic/20050967)
[
编程
](//www.zhihu.com/topic/19554298)
赞同 33141 条评论
分享
喜欢收藏申请转载
赞同 331
分享
写下你的评论...
41 条评论
默认
最新
将来必有C# 9, 但是会否有.net framework 4.9就不好说了
2018-06-15
5
真让人说对了
2021-09-30
赞
良心好文,值得推荐与收藏。个人觉得,C#是一套很不错的语言,我在工作之余学习它过后,编写一些工具,大大提高工作效率。入门简单,立杆见效。
2018-08-04
1
那不然我怎么说?我说只说入门简单,又没说精进简单。
2019-03-12
1
标签:06,进化,C#,简史,2018,15,NET,com From: https://www.cnblogs.com/liu161511/p/16774053.html