程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C# 4.0中的動態類型和動態編程

C# 4.0中的動態類型和動態編程

編輯:C#基礎知識
# 4.0的主題就是動態編程(Dynamic Programming)。雖然C#仍然是一種靜態語言,但是對象的意義開始變得越來越“動態”。它們的結構和行為無法通過靜態類型來捕獲,或者至少編譯器在編譯程序時無法得知對象的結構和行為。

  C#引入了一種新的靜態類型”dynamic”,當你擁有了一個dynamic類型的對象後,你“對它做的事情”只會在運行時進行解析。設想我們擁有這樣兩個類,分別表示兩種飲料:

  public class Coffee

     {public string GetName()

      {

      return "You selected Maxwell coffee.";

       }

       }

  public class Juice

      {

      public string GetName()

       {

       return "You selected orange juice.";

       }

       }

  現在,我們就可以用dynamic類型來表示這兩種飲料。我們寫一個函數GetDrink(),根據用戶不同的選擇返回不同的對象。

  static private Object GetDrink(int i)

     {

      if (i == 1)

      {

       return new Juice();

       }

       else

       // default

      {

       return new Coffee();

       }

       }


  static void Main(string[] args)

      {Console.WriteLine("Please Select Your Drink: 1 -- Juice; 2 -- Coffee");

      int nDrinkType = Console.Read();

      dynamic drink = GetDrink( nDrinkType );

      Console.WriteLine( drink.GetName() );

      }

  C#編譯器允許你通過dynamic對象調用任何方法,即使這個方法根本不存在,編譯器也不會在編譯的時候報編譯錯誤。只有在運行的時候,它才會檢查這個對象的實際類型,並檢查在它上面GetName()是什麼意思。動態類型將使得C#可以以更加統一而便利的形式表示下列對象:

  ◆ 來自動態編程語言——如Python或Ruby——的對象

  ◆ 通過IDispatch訪問的COM對象

  ◆ 通過反射訪問的一般.NET類型

  ◆ 結構發生過變化的對象——如HTML DOM對象

  當我們得到一個動態類型的對象時,不管它是來自COM還是IronPython、HTML DOM還是反射,只需要對其進行操作即可,動態語言運行時(DLR)會幫我們指出針對特定的對象以及這些操作的具體意義。這將給我們的開發帶來極大的靈活性,並且能夠極大程度上地精簡我們的代碼。  
0
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved