1,異步編程 因為在移動設備上,程序的響應速度實在是一個太重要的問題,所以對於應用被觸摸後的反應也是同等重要。 在 Windows Runtime 中,設計師總是要考慮如果一個交互式操作需要耗費大於50毫秒的話,那麼就該用異步編程來解決過慢的反應了,雖然同步編程很簡單易懂,但是隨著移動應用開發越來越火,如何更加方便的異步編程就是一個重要的話題了。
所以在制作 Metro App 時,C#獨有的 async 與 await 關鍵字就是 C# 相比較 C++以及 JavaScript 在異步編程時的絢麗閃光點了;用 C++ 與 JavaScript,執行異步編程就意味著回調方法,甚至修改整個應用內核。然而 C# 的提供的異步編程方法能讓你用同步編程的習慣寫代碼,卻以異步的方式來實現,一舉兩得。
當然,說太多不能滿足你的好奇心,去看看 Anders demo 演示的異步編程演示吧,你未來的Windows編程肯定少不了它了。
2,Windows Runtime 集成 Anders展示了新的Windows Runtime已經深度集成了.NET與C#,比如用C#作為"Compute engine"然後輸出HTML/JavaScript的Metro App(簡直就和C++一樣)。所以你可以創建一個 C# 的項目,編譯成 WinMD 文件,然後在你的 HTML/JavaScript 項目添加為引用。這樣就能在JavaScript中智能地獲取C#對象。正如Anders說到,"對於JavaScript程序員,你可能很幸運,但是對於C#程序員,你永遠都是幸運的"。
3,Caller Info 特性 Aforementioned Caller info 特性也被公布出來,這不算是一個驚人大發明,只是演示項目的代碼調色清理盤而已。
因為對於C++程序員來說理解宏是很簡單的,但是C#程序員就不一樣了,所以我們在想一個新辦法讓C#也支持宏。 我們都知道C# 4.0已經支持了可選參數,那麼C# 5.0就添加了 CallerFilePath與 CallerLineNumber以及 CallerMemberName 特性。 比如你可以像下面那樣寫一段 Trace.WriteLine 方法: public static class Trace{ public static void WriteLine(string message, [CallerFilePath] string file = "", [CallerLineNumber] in line = 0, [CallerMemberName] string member = "") { var s = string.Format("{0}:{1} - {2}: {3}", file, line, member, message); Console.WriteLine(s); }}
然後,如果你打算調用 Trace.WriteLine("Something just happened"),那麼編譯器將會自動依據你在哪裡調用這個方法的信息來填寫完剩下的可選參數。 注意這個特性在開發者預覽版裡是沒有的,將在最終發行版首次亮相,正如Anders說到,這算不上一個大大的驚喜,但是不用懷疑很多人都會喜歡用它。
4,The Roslyn (Compiler APIs) Project Anders介紹到Roslyn時說到因為我們越來越沉迷與IDE提供的便利,比如查找引用,搜索Symbol,重命名以及提取方法等等。但常識告訴我們有個前提就是代碼是必須鎖定在編譯器內的。
Roslyn 就是一個內建API編譯器,它的輸出就如同當前項目的代碼編譯器一樣,將包含語法樹API,標記 API,綁定分析流API以及發行API等等。而且這些API本身就是依據現代API設計原理來的。
以上的所有特性在10月中旬就可以使用了,當 Visual Studio Roslyn 的CTP版本發布時,C#與VB的API就能正常使用。