C# 4.0中的动态类型和动态编程

来源:互联网 发布:淘宝最漂亮的女童模特 编辑:程序博客网 时间:2024/05/10 07:53
C# 4.0的主题就是动态编程(Dynamic Programming)。虽然C#仍然是一种静态语言,但是对象的意义开始变得越来越“动态”。它们的结构和行为无法通过静态类型来捕获,或者至少编译器在编译程序时无法得知对象的结构和行为。 甘特图Xgantt(全球首款甘特图32年历史) Visual WebGui(完美的用户界面解决方案) Stimulsoft Reports.Net(报表生成控件) DXperience UniPremium 白金版(慧都独家)

  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)会帮我们指出针对特定的对象以及这些操作的具体意义。这将给我们的开发带来极大的灵活性,并且能够极大程度上地精简我们的代码。
原创粉丝点击