標籤:

C#進化極簡史

C#進化極簡史

來自專欄.NET Core筆記與思考

作為.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.Dobbs》雜誌的2001年西部會議上被授予「Prestigious Excellence in Programming Award」,《Dr.Dobbs》雜誌的主編Jonathan Erickson說:「這一榮譽,我們每年只頒給那些在軟體開發領域做出非凡貢獻的人員,Anders開發的C#和他整個職業生涯中為軟體開發所做出的巨大貢獻有目共睹,他無愧於這一榮譽!」

現在 C# 是由 C# 語言設計團隊與實現該語言的 Roslyn 項目協作設計的,你可以在GitHub上找到他們的repo。

dotnet/csharplang?

github.com圖標

名字

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圖標

特點

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圖標

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

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圖標

2012年8月,C# 5.0

  • Asynchronous methods/非同步方法
  • Caller info attributes/調用方信息attributes(特性)

An Introduction to New Features in C# 5.0?

blogs.msdn.microsoft.com圖標

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/字典初始化

Whats New in C# 6 - C# Guide?

docs.microsoft.com圖標

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可以在表達式中使用

Whats New in C# 7.0 - C# Guide?

docs.microsoft.com圖標

2017年8月,C# 7.1

  • Async main/非同步main方法
  • Default literal expressions/default關鍵字類型省略
  • Inferred tuple element names/元組元素名稱推斷

Whats new in C# 7.1?

docs.microsoft.com圖標

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

Whats new in C# 7.2?

docs.microsoft.com圖標

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/重載解析增強

Whats new in C# 7.3?

docs.microsoft.com圖標

希望通過這篇文章能讓大家對C#編程語言有更感性的認識。

註:資料主要來自於維基百科

更新日誌:添加7.3特性


推薦閱讀:

如何優雅地產生一組符合正態分布的隨機數?
如何評價ML.NET?
如何看待.net core 2.1正式發布?
NET Framework 為什麼只是重載了Double和Float浮點數的運算符?
怎麼看待.net core 2.0發布?

TAG:C | NETCore | 編程 |