在QCon紐約2016大會上,C#項目經(jīng)理Mads Torgersen介紹了即將到來的C# 7。他還簡單地闡述了C#的演化過程,并展示了部分正在開發(fā)的未來版本特性。
近年來,云和分布式系統(tǒng)的出現(xiàn)使開發(fā)人員面臨著新的挑戰(zhàn)。開發(fā)人員需要進(jìn)步,語言也要隨之進(jìn)步。像C#這樣一門多用途語言,其演化需要平衡不同的方面:
改善 vs 保持簡單 改善現(xiàn)有開發(fā) vs 吸引新用戶 采用新范式 vs 忠于C#的OOP精神近年來,.Net整體上也經(jīng)歷了重大的變化:
支持Windows、Mac OS和Linux(.Net Core) 部署系統(tǒng) 編譯成本地代碼(.NET Native) 開源編譯器和公共Roslyn API 多編輯器選擇(由OmniSharp和Roslyn促成) 開源框架、編輯器和工具C# 7
C# 7將隨Visual Studio 15交付,后者目前是以預(yù)覽版的形式提供。為了加快新語言特性的推出速度,他們正在討論點版本發(fā)布。這樣,語言特性會包含在小版本中。此舉的目的在于,一旦新特性開發(fā)完成,早期采用者就可以選擇激活各種新特性。
C# 7將包含元組。從一個方法返回多個值變得更簡單:
static (int sum, int count) Method(){ return (0, 0)}// 調(diào)用方法并使用結(jié)果var result = Method();Console.WriteLine($"Sum:{result.sum}.Count: {result.count}.");元組還可以用在泛型類型中。元組是值類型,也就是說,它們是在棧上分配內(nèi)存,而不是堆上。這可能會提高性能,比如減少關(guān)鍵代碼路徑中的垃圾收集開銷。
// 異步方法返回元組static async Task<(int sum, int count)> Method()// Dictionary使用元組作為鍵var dict = new Dictionary<(string first, string last), person>;部分模式匹配特性的刪減招致了模式匹配特性將整體刪除的傳言。C# 7還會包含模式匹配特性,未來版本還會進(jìn)行增強(qiáng)。
C# 7后續(xù)版本特性
有多項特性目前正在開發(fā)之中,將會包含在C#的下一個版本中。為了提供一種簡單的方式處理某些場景,更多的模式匹配語義也正在探索之中:
// 使用C# 7模式匹配if (O is Point p && p.X == 5) { WriteLine($"Y: {p.Y}")}// 使用未來版本的替代語法處理相同的場景if (o is Point X {var x, Y: var y} && x == 5) { WriteLine($"Y: {y}")}if (o is Point { X : 5, Y: var y}) { WriteLine($"Y: {y}")}if (o is Point(5, var y)) { WriteLine($"Y: {y}")}可空引用類型的實現(xiàn)正在進(jìn)行當(dāng)中。當(dāng)前的思路是,當(dāng)編譯器檢測到null值的不合理使用時就發(fā)出警告:
string? n;string s;n = null; // 好的,可空s = null; // 警告,不應(yīng)該為空s = n; // 警告WriteLine(s.Length); // 一定不為空WriteLine(n.Length) // 警告!可能為空不可變值類型Record是另一項正在開發(fā)中的特性。不可變讓并發(fā)環(huán)境數(shù)據(jù)分享更安全,讓程序更容易推斷。Record類型提供了一種在C#中使用不可變性的簡潔方式。Record有默認(rèn)值語義,就是說提供了開箱即用的getter、GetHashCode、equality成員實現(xiàn)。
查看英文原文:C# 7 and Beyond with Mads Torgersen