zoukankan      html  css  js  c++  java
  • VS2010的新特性:3.新要害词 Dynamic

    DotNet 4.0中新增了一个类型:dynamic,它是一个静态类型,但在编译时它会绕过静态类型的检查,它将在程序运行时赋予动态对象时再确认赋予的类型。

    下面我们来看一段代码:

    public static void Main(string[] args)
            {
                dynamic dyn = 10; 
                dyn = dyn + 10;
                Console.WriteLine(dyn);

    dyn = dyn + 10.02;
                Console.WriteLine(dyn);

    dyn = "asdfg";
                Console.WriteLine(dyn);
            }

    我们来看一下结果:

    20

    20.02

    asdfg

    dyn的类型从intdouble再到string类型在不断地变化。在编译时dynamic被直接绕过,并没有检查其类型。

    来看一下dynamic objectvar的区别,

    object:

    public static void Main(string[] args)
            {
                object dyn = 10; 
                dyn = dyn + 10;   //
    编译时这里会报错误,object不能在int类型之间使用“+.要执行类型转化后才能执行操作,(int)dyn + 10
                Console.WriteLine(dyn);
            }

    var:

    public static void Main(string[] args)
            {
                var dyn = 10; 
                dyn = "abc";   //
    编译时这里会报错误,类型错误。因为在编译时dyn已经被赋予了int类型
                Console.WriteLine(dyn);
            }

    dynamic运行时动态的赋予类型,object使用时需要显式转换到你期望的类型,var编译时会反向推断并确认类型。

    再看下面一段代码:

    public static void Main(string[] args)
            {
                Assembly asm = Assembly.LoadFile("xxxx.dll");
                dynamic dyn = asm.CreateInstance("MyAss.ClassName");
                dyn.Show("dynamic!");
            }

    这是dynamic替代反射调用函数,它极大的简化了操作,让我们在编程时更加的轻松愉快^_^

    最后提一下,你可能在以下情况会使用到dynamic

    自动反射

    COM组件互操作

    混合编程,例如IronRuby IronPython

    处理Html DOM对象

    还有更多的VS2010新特性,将在以后的文章中出现。

     

  • 相关阅读:
    剑指offer-面试题59_2-队列的最大值-队列
    剑指offer-面试题59_1-滑动窗口的最大值-数组
    剑指offer-面试题64-求1+2+...+n-发散思维
    客车网上售票系统之前台订票、退票、改签管理和前台留言管理
    客车网上售票系统之票务管理
    客车网上售票系统项目之留言管理和新闻管理
    客车网上售票系统之用户管理
    客车网上销售系统需求分析及项目燃尽图
    MyBatis-plus逻辑删除
    项目启动注释模板
  • 原文地址:https://www.cnblogs.com/letnet/p/1783086.html
Copyright © 2011-2022 走看看