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

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开发者的工作变得更加简单。比如说,下面这是实现属性更改通知的一个典型模式:

publicclassCustomer : INotifyPropertyChanged

{

   publiceventPropertyChangedEventHandler PropertyChanged;

 

   privatestring _firstName;

   publicstring FirstName

   {

     get { return _firstName; }

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

   }

 

 

   privatevoid Set(ref T field, T value, string memberName)

   {

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

      {

         field = value;

         if (PropertyChanged != null)

         PropertyChanged(this, newPropertyChangedEventArgs(memberName));

       }

   }

}

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

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

publicclassCustomer : INotifyPropertyChanged

{

   publiceventPropertyChangedEventHandler PropertyChanged;

 

   privatestring _firstName;

   publicstring FirstName

   {

      get { return _firstName; }

      set { Set(ref _firstName, value); }

   }

 

 

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

   {

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

      {

         field = value;

         if (PropertyChanged != null)

         PropertyChanged(this, newPropertyChangedEventArgs(memberName));

      }

   }

}

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

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

译者 李永伦 从02年开始关注.NET,读过4年工商管理,任过3届微软MVP,最近恋上Ruby。

This entry was posted in 未分类. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s