C# 5.0与VB.NET 有哪些新玩意

junwong 发布于 2012/08/16 16:48
阅读 4K+
收藏 19
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就能正常使用。

原文链接 , OSChina.NET 原创翻译
加载中
0
newzai
newzai
第1点竟然说c++不支持异步编程,而且还只能使用回调实现,真是笑死人,估计写这个文章的人还不了解c++11
赵刚
“用 C++ 与 JavaScript,执行异步编程就意味着回调方法,甚至修改整个应用内核。然而 C# 的提供的异步编程方法能让你用同步编程的习惯写代码,却以异步的方式来实现”。看清原文。。c++11异步难道不是回调实现么。。
newzai
newzai
回复 @helloworld_go : 语言层支持不是至关重要,只要写代码轻松愉悦即可。和Java支持在switch语句中使用字符串一样,也是在内部转换为if else语句的。但是代码层面写起来很愉悦。 C++ lambal,不管在那个层面实现,总是代码写起来,只会让我快乐,而不是像回调一样,让我头痛。
helloworld_go
helloworld_go
没有在语言层面支持。C++是在类库层面支持,其实汇编也支持异步编程。
鉴客
鉴客
人家没这么说啊
0
无聊的人啊
无聊的人啊
第二点,我不知道他在搞什么飞机.觉得炒作
0
范特彪西
范特彪西
我只看懂了一句:” 对于C#程序员,你永远都是幸运的“
有个地方叫作遥远
有个地方叫作遥远
这道是真的.
0
钛元素
钛元素
对于异步编程真的还不懂,要学习...it人真苦逼,学海无涯
0
省委书记沙瑞金
省委书记沙瑞金
不懂c#的娃娃经过!
0
OrionBox
OrionBox
他们只是工具,咱们只是使用者。
0
junwong
junwong
async 与 await 带来的好处不亚于当年的 Linq
Evo
Evo
是啊.太帅了,不过不做C#的和还停留在2.0的人是感觉不到的
0
dodola
dodola
在没有await和async关键字之前C#的异步是通过代理 回调完成异步操作的吧?对这些东西有些混乱了
junwong
junwong
在没有 匿名方法前,就是靠回调来解决。虽然有了匿名方法后也还是同样的回调原理,但是在代码整理以及可读性上好了很多很多。 这次加上 async 以及 await 关键字,个人认为原理上不可能和以前有太大的变化。微软做这些底层相同的工作只是为了让我们编程时更舒心而已。
0
cloud
cloud
我还在用2.0语法,表示很困惑
junwong
junwong
起码要学下LINQ吧
0
寂寞的大师
寂寞的大师
不喜欢微软的东西
junwong
junwong
我刚好相反 特别喜欢微软的东西
返回顶部
顶部