BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Windows Runtimeサポートや非同期メソッドなどの、C#とVB.NETの新機能

Windows Runtimeサポートや非同期メソッドなどの、C#とVB.NETの新機能

原文(投稿日:2011/09/19)へのリンク

C#とVB.NETには近々、Windows Runtimeのサポート、非同期メソッド、Caller Info属性などの新機能が追加される予定だ。また、コンパイラにも、コンパイラが認識しているコードの情報をIDEや開発者に公開するAPIが追加される予定だ。

MicrosoftのAnders Hejlsberg氏は、Microsoft BUILDカンファレンスで次期C#とVB.NETの新機能についてのプレゼンテーションを行った。ありがたいことに、Samuel Jack氏が自身のブログにそれらの詳細を投稿している(“次期C#とVB.NETでは何が変わるのか?”)。その要約を以下に示す。

  • Windows Runtime サポート – C#と.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、エミット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<T>(ref T field, T value, string memberName)

   {

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

      {

         field = value;

         if (PropertyChanged != null)

         PropertyChanged(this, new PropertyChangedEventArgs(memberName));

       }

   }

}

この実装パターンの問題は、間違いを犯しやすいことだ。もしセッター内で指定しているプロパティ名のスペルを間違えたり、プロパティ名を変更したりすれば、何の警告もなく変更通知が失敗してしまうことになるだろう。

新しく追加される属性を使えば、これを改善することができる。

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<T>(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のツールベンダーに多くの可能性をもたらすだろう。これからが楽しみだ!

この記事に星をつける

おすすめ度
スタイル

BT