原文地址
Mads Torgersen,微軟 C# 程序管理者,它發布了一個視頻,描述即將到來的下一個 C# 版本——C# 6。在 C# 6 的新特性之間,Mads 主要提到了 getter-only 屬性,拉姆達箭頭操作符,字符串插值(string interpolation) 等等。
首先,Mads 說,C# 6 不會改版 C# 的設計哲學,并且將提供很多小得特性,來幫助整潔代碼。
C# 6 允許定義不變的自動化屬性,例如,只支持一個 getter 方法的自動化屬性:
public class Point
{ public int X { get; }
public int Y { get; }
public int ReadWrite { get; set; }
}
Getter-only 自動化屬性是只讀的,可以通過構造函數來賦值。
這個沒太明白,C# 6 之前的版本也有這個特性啊~
字符串插值傳統的C#語法按 Mads 描述為“一種混亂且容易出錯”:
return String.Format("({0}, {1})", X, Y);
C# 6 將引入一個新的字符串插語法:
return "(/{X}, /{Y})";
新的 lambda 箭頭操作符將簡化返回一個單獨表達式值的方法定義:
public override string ToString() => "(/{X}, /{Y})";
public double Dist => Sqrt(X * X + Y * Y);
按照 Mads 的說法,這將幫助減少大量“樣板式”代碼的鍵入。
在現在的 C# 中,index 設置器必須用一個單獨的語句賦值:
var result = new JObject(); result["x"] = X; result["y"] = Y;在 C# 6,可能用一個表達式來初始化對象:
var result = new JObject() { ["x"] = X, ["y"] = Y };
這將導致一個高簡潔和可讀性好的 ToJSon 方法的定義:
public JObject ToJson() => new JObject() { ["x"] = X, ["y"] = Y };
Null 條件操作符是一個新特性,旨在檢查 null 值。因此,不是下面那樣檢查:
if (json != null &&
json["x"] != null &&
json["x"].Type == JTokenType.Integer)C# 6 運行使用一個新的 ? 操作符,將計算緊跟著它表達式的一部分,只要它應用在一個非null對象,上述表達式就可以縮小到:
if (json?["x"]?.Type == JTokenType.Integer)
上面這幾個特性,微軟顯然吸收了開源社區的做法,比如,Groovy,讓代碼變得更加簡潔~
異常過濾運行捕獲表達式,只要符合一個特定條件:
try { } catch (ConfigurationException e) if (e.IsSevere)
{ }Mads 說,這是一個更好的 catch-rethrow 語法,因為,以前,當重新拋出異常時,異常最初發生的地方將會丟失。
最后,在 catch 和 finally 塊中可以使用 await,這增加了在錯誤處理的靈活性。Mads 補充說,該特性被排除在 C# 6 之前的版本,因為,這個特性如何實現,那時還不明確。
try { } catch (ConfigurationException e) { await LogAsync();
}
finally { await CloseAync();
}
最近發布的Xamarin.Studio 5.9增加了 C# 6 支持,改進了 Sketches,并帶來了新的調試器查看器及其它一些更新。C# 6 將在 Visual Studio 2015 中正式發布,并只在社區版本中提供。盡管如此,Xamarin.Studio 也已經支持 C# 6 的新特性。
新聞熱點
疑難解答