zoukankan      html  css  js  c++  java
  • C# 4.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
  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/ExMan/p/5174179.html
Copyright © 2011-2022 走看看