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就能正常使用。