BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

C#和VB.NET获得Windows Runtime支持和异步方法

| 作者 Roopesh Shenoy 关注 0 他的粉丝 ,译者 李永伦 关注 0 他的粉丝 发布于 2011年9月27日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

C#和VB.NET将会获得新特性,比如说,Windows Runtime支持、异步方法和Caller Info特性等等。另外,编译器也会获得一些API,把它对代码的了解暴露给IDE和开发者。

微软的Anders Hejlsberg在微软BUILD大会上演示了C# 5.0和VB.NET的新特性。Samuel Jack在他的博文《What's new in C# 5.0 and VB.NET?》里给出了详细的列表。下面是新特性的摘要:

  • Windows Runtime支持:C#和VB.NET现在已经深度整合到Windows Runtime了——C#项目可以编译成WinMD文件,然后在HTML/JavaScript项目里引用。InfoQ之前已经详细报道过这个特性了。
  • 异步方法:使用async和await关键字写异步任务更加简单,这在去年PDC首次演示,然后再Async CTP提供预览。这些文章深入地探索了这个特性。
  • Caller Info特性:新的CallerFilePath、CallerLineNumber和CallerMemberName特性可以在可选方法参数上使用,协助获取调用方的详细信息,但不必从调用方法传递进来。
  • 编译器API:这个特性应该在C# 5.0之后出来。这些API将会通过语法树API、符号API、绑定和流程分析API以及Emit API向IDE和开发者暴露编译器对代码的了解。你可以在这个Microsoft Research的视频获得详细信息。

这些新特性可以使.NET开发者的工作变得更加简单。比如说,下面这是实现属性更改通知的一个典型模式:

public class Customer : INotifyPropertyChanged

{

   public event PropertyChangedEventHandler PropertyChanged;

   private string _firstName;

   public string FirstName

   {

     get { return _firstName; }

     set { Set(ref _firstName, value, "FirstName"); }

   }

 

   private void Set(ref T field, T value, string memberName)

   {

      if (!object.Equals(field, value))

      {

         field = value;

         if (PropertyChanged != null)

         PropertyChanged(this, new PropertyChangedEventArgs(memberName));

       }

   }

}

这个模式的问题在于很容易把代码搞乱。如果你在set访问器里拼错属性的名字,或者你重命名了属性,那么它会悄然失效。

使用新的类似宏的特性可以避免这种失效:

public class Customer : INotifyPropertyChanged

{

   public event PropertyChangedEventHandler PropertyChanged;

   private string _firstName;

   public string FirstName

   {

      get { return _firstName; }

      set { Set(ref _firstName, value); }

   }

 

   private void Set(ref T field, T value,[CallerMemberName] string memberName = null)

   {

      if (!object.Equals(field, value))

      {

         field = value;

         if (PropertyChanged != null)

         PropertyChanged(this, new PropertyChangedEventArgs(memberName));

      }

   }

}

类似的,异步编程将会变得更简洁,也会变得更常用,触摸界面将会要求大多数方法都是异步的。Silverlight开发者将会对此感到欣慰。另外,就像Anders演示的“Paste as VB”和“Paste as C#”,编译器API将会为.NET工具开发商带来更多的可能性。有趣的时刻马上就到了!

查看英文原文:C#, VB.NET To Get Windows Runtime Support, Asynchronous Methods

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT