C#进化极简史

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/csharplang​github.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 Foundation​github.com/dotnet

特点

C# 是一种多重范式,包含了强类型,指令式,声明式,函数式,泛型,面向对象(基于类型)以及面向组件的编程语言,它是微软为了推动.net平台而为CLI(公共语言基础结构/common language infrastructure)开发的。

C# 同时也是ECMA和ISO等国际化标准组织的标准,标准规范可以在这里下载ECMA-334ISO/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.0​msdn.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 4​msdn.microsoft.com/en-us/magazine/ff796223.aspx

2012年8月,C# 5.0

  • Asynchronous methods/异步方法
  • Caller info attributes/调用方信息attributes(特性)

An Introduction to New Features in C# 5.0​blogs.msdn.microsoft.com/mvpawardprogram/2012/03/26/an-introduction-to-new-features-in-c-5-0/

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# Guide​docs.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# Guide​docs.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.1​docs.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.2​docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-2

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/泛型约束增强
  • 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.3​docs.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)

赞同 331​​41 条评论

分享

喜欢​收藏​申请转载

赞同 331

分享

写下你的评论...

41 条评论

默认

最新


saint-yellow

将来必有C# 9, 但是会否有.net framework 4.9就不好说了

2018-06-15

5


巴乔

真让人说对了

2021-09-30


有心人

良心好文,值得推荐与收藏。个人觉得,C#是一套很不错的语言,我在工作之余学习它过后,编写一些工具,大大提高工作效率。入门简单,立杆见效。

2018-08-04

1


有心人

天明

那不然我怎么说?我说只说入门简单,又没说精进简单。

2019-03-12

1


天明

😂入门简单?我听错了吧?

2019-03-11


加菲猫

"C# 是一种多重范式,包含了强类型,指令式,声明式,函数式,泛型,面向对象(基于类型)以及面向组件的编程语言" 和C++一样都是多重范式的语言.

2018-12-25

1


知乎用户vQH97Z

好久没有用过这个了……

2018-08-20

1


singcl

我就说写c#感觉好多地方和typescript类似,原来是同一个人主导的啊

2018-08-19

1


灵魂对撞机

未来是属于c#的

2018-06-20

1


别碍事

身为.net开发,眼看着C#的市场越来越萎缩。招标系统要求Java平台,产供销研财系统必须Java实现...

2018-06-15

4


小卒

王阿觉

用惯了c#转Java会不舒服,就像自动挡高配转成乞丐版手动挡

2018-07-28

4


天明

小卒

用惯了java,不习惯c#。用惯了python,也不习惯java,要说易用性,都不比上国产的易语言。

2019-03-11

1

展开其他 2 条回复​


ychost

感觉java使用起来还是c# 2.0的阶段😂

2018-06-24

3


风语者

现在的吉祥物是啥!

2018-06-15

3


6号咸鱼

作者

风语者

haters gonna hate, 人家要黑你,你是上帝都拦不住。哈哈

2018-06-15


风语者

6号咸鱼

那以后黑C#就说他没有吉祥物?

2018-06-15

展开其他 1 条回复​


ggffss

红红火火恍恍惚惚 期待C#越来越新潮。

2018-06-15

3


范建中

这吉祥物太扎心了

2018-06-14

3


思维导图应用探索

然后开源的Free pascal和lazarus,又是受Delphi影响的,Anders真牛!

2018-06-25

1


Wonder

知道c#正变得越来越好,但是出去找工作又是java占优势....

假意改信,日后悔过吧

2018-06-20

1


小胖读书

不知道为什么看到这文章倍感亲切

2018-06-15

1


88号元素

只能说开源有点晚了

2018-06-15

1


6号咸鱼

作者

也是无奈,要不是微软云计算业务崛起的话可能现在都还没开源

2018-06-15


丧尸 布兰德

out变量这么晚的么?

2018-06-14

1


6号咸鱼

作者

7.0里的out是改进

之前你需要这样使用out:

int numericResult;

if (int.TryParse(input, out numericResult))

WriteLine(numericResult);

else

WriteLine("Could not parse input");

7.0里你可以这样使用,也就是不需要额外声明了

if (int.TryParse(input, outint result))

WriteLine(result);

else

WriteLine("Could not parse input");

如果有疑惑可以查看对应的文档。

2018-06-14

2


八舞耶俱矢

C#8

2018-06-14

1


xgx1

还没有出吧?

2018-06-14


风清扬

学c井, 到找工作时你真的会后悔的。c井点net,屏蔽了太多的硬件底层,纯粹是写业务的语言。用了七年多,哎。。。真后悔上了巨硬贼船。一言难尽,手机码字 触摸键盘 太蛋疼,欢迎私下交流

2019-09-07


实验石

献上我的膝盖,编程天才,要不要这么变态啊。

2019-08-16


邓明晨

优秀

2018-07-23

点击查看全部评论

写下你的评论...

文章被以下专栏收录

[

](//www.zhihu.com/column/netcore)

[

.NET 笔记与思考

](//www.zhihu.com/column/netcore)

学而时习之

推荐阅读

[

C# 集合

数组可以保存多个兑现个,但是某些情况下无法确定到底需要保存多少个对象,由于数组的长度不可变,因此数组将不再适用。 为了保存这些数目不确定的对象C#提供了一系列特殊的类,这些类可以…

LuckyOne

](https://zhuanlan.zhihu.com/p/110861796)[

C# 9 新特性:代码生成器、编译时反射

hez20...发表于hez20...

](https://zhuanlan.zhihu.com/p/137546707)[

如何使用C++四种范式编程写一个add?

Silverlight

](https://zhuanlan.zhihu.com/p/258465638)[

C# 10 完整特性介绍

前言距离上次介绍 C# 10 的特性已经有一段时间了,伴随着 .NET 6 的开发进入尾声,C# 10 最终的特性也终于敲定了。总的来说 C# 10 的更新内容很多,并且对类型系统做了不小的改动,解决了非…

hez20...发表于hez20...

](https://zhuanlan.zhihu.com/p/399088002)

x1.00

>

<

>>

<<

O

x1.00

想来知乎工作?请发送邮件到 jobs@zhihu.com

posted @   金羽皆隹  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示