2008年11月4日 星期二

dynamic

以往在 c#3.0 ,使用 anonomous type時,有個嚴重的限制。那就是不能離開該 scope 如下

class Program
  {
    static void Main(string[] args)
    {
      var q = new { Name = "Charles", Id = 1 };
      Console.WriteLine("Name = {0}, Id = {1}", q.Name, q.Id);
    }
  }
q 是一個 anonomous type, 無法離開 Main 的範圍。因此無法將 q 的結果以下面的方式表示,因為會出現 compile time 錯誤。System.Object 沒有 Name 及 Id 的屬性。
class Program
  {
    static void Main(string[] args)
    {
      var q = new { Name = "Charles", Id = 1 };
      DoWriteMessage(q);
    }

    private static void DoWriteMessage(object q)
    {
      Console.WriteLine("Name = {0}, Id = {1}", q.Name, q.Id);
    }
  }
然而,使用 C#4.0 的 dynamic 就完成了
class Program
  {
    static void Main(string[] args)
    {
      var q = new { Name = "Charles", Id = 1 };
      DoWriteMessage(q);
    }

    private static void DoWriteMessage(dynamic o)
    {
      Console.WriteLine("Name = {0}, Id = {1}", o.Name, o.Id);
    }
  }

dynamic 說明了 o 在 compile time 是什麼型別不重要,一切等到 runtime 再說。到了 runtime 時,取出 o 的Name 及 Id 屬性。

必須注意到,o 在 coding 時完全無法使用 intellisense,畢竟它是 dynamic 啊!

沒有留言:

Share with Facebook