码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2016-02-01 02:08:29      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

# 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

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

标签:

原文地址:http://www.cnblogs.com/ExMan/p/5174179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!