• Dynamic


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

  • 相关阅读:
    XLS导出的服务器端配置方式
    SQLSERVER2008 内存占用高的处理方式
    word定义多级列表
    SQL Server替换特殊字符
    php和mysql两种不同方式的分割字符串和类型转换
    tp杂记
    MySql数据库 主从复制/共享 报错
    the server ssl certificate failed to verify
    loaded some nib but the view outlet was not set(转载)
    xcode7 调用相册权限无提示
  • 原文地址:https://www.cnblogs.com/xjt360/p/3887571.html
Copyright © 2020-2023  润新知