• Net 4.0 之 Dynamic 动态类型


    本文主要旨在与网友分享.Net4.0的Dynamic 对Duck Type 的支持。

        一、.net4.0主要新特性


            .Net4.0在.Net3.5基础上新增的主要特性有:可选参数、命名参数和Dynamic。具体请阅生鱼片的这篇博文。这里我们着重讲解C#4.0的Dynamic特性,对于其他特性大家可以在VS2010内尝试一下。总之.Net在不断进步中。

         二、ExpandoObject普通应用  


           ExpandoObject 类,“需引用System.Dynamic命名空间” 。请看以下代码:       

    dynamic Customer = new ExpandoObject();
    Customer.Name = "Lucy";
    Customer.Age = 20;
    Customer.Female = true;
    Console.WriteLine(Customer.Name + Customer.Age + Customer.Female);
    Console.ReadKey();

    输出<< Lucy20True,这里已经类似javascript 的var obj ={}; obj.Name ='lucy'。但又不完全相同,因为不能在clr运行时动态生成属性或者方法。但至少比.NET3.5先进了。

    三、Dynamic 动态类型对DuckType 的支持


          1.前不久在园子里面看见了thinking的这篇博文,文中有这么一段代码:

    static class Calculator {
        public static T Add<T>(T t1, T t2) {
            dynamic d1 = t1;
            dynamic d2 = t2;
    
            return (T)(d1 + d2);
        }
    }
    
    public static void Main(string[] args){
        int i = Calculator.Add(1, 2);
        double d = Calculator.Add(1.1, 2.2);
        string s = Calculator.Add("abc", "def");
    
        Console.WriteLine(i + " " + d + " " + s);
    
    }

    输出:

    >>3 3.3 abcdef

    作者在文中指出了以上C#代码是为了通过动态类型来实现基于duck typing的泛型参数约束。

    为了在C#支持Duck Type还有一个重要的.Net4.0特性有必要提及到,这也是本文重点讨论的内容。

    它就是:“DynamicObject” 该类位于System.Dynamic 命名空间下。

  • 相关阅读:
    Springboot+resteasy定时任务
    MySql COUNT(),SUM()组合用法
    MySql按每日、每周、每月分组统计数据
    阿里云通过访问地址来缩小图片,减少流量消耗
    ExtJs6获取form里的数据
    postfix中recipient/client/sender/helo四者的区别<转载>
    用telnet命令,POP3接收邮件
    用telnet命令,SMTP发送邮件
    Linux 标准目录结构
    centos minimal Bind 主从服务器部署
  • 原文地址:https://www.cnblogs.com/wolfocme110/p/4364788.html
Copyright © 2020-2023  润新知