2010年2月11日 星期四

C# 4.0: dynamic language (2)

Javascript 是一個動態語言。請看下面這一段 script

   1: <script type="text/javascript">
   2:     function Test() {
   3:       var o = new Object();
   4:       o.Name = "aaa";
   5:       o.Id = 3;
   6:       o.Show = function () { alert("Id = " + o.Id + ", Name = " + o.Name) };
   7:       o.Show();
   8:     }
   9:     Test();
  10:   </script>

而 C# 4.0 呢?有沒有相對應的寫法呢?有的!將 var 改成 dynamic,而 Object 改成 ExpandoObject。而沒有回傳值的函數,就是 Action。如下。

   1: static void Main(string[] args)
   2:     {
   3:       dynamic o = new ExpandoObject();
   4:       o.Name = "aaa";
   5:       o.Id = 3;
   6:       o.Show = new Action(() => Console.WriteLine("Id = " + o.Id + ", Name = " + o.Name));
   7:       o.Show();
   8:     }

是不是很類似呢?原來,C# 3.0時, lamda expression 就是採用了動態語言的特性,但使用靜態語言的編譯器就達到了動態語言的效果。

沒有留言:

Share with Facebook