好久好久没有上过博客园了,也许是太忙,也许是忘记了,也许是。。。。但是今天终于来了,感觉很亲切,所以就把昨天自己参加面试时的一个问题总结下,当时主要问我的var和dynamic他们在c#中有和区别,但是我也顺便多写了一点点,总结如下,希望能帮助到那些和我也一样迷茫过的朋友。

  首先,毫无疑问,类型不同: 

 A、  int:声明为一个整数类型的变量;

 B、 object  所有类型的父类 ;

  C、  var  可变型类型;  看你怎么用 , 你使用中为什么类型, 就是什么类型;
 D、 dynamic 类型与 object 类型的行为是一样的。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查,编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。 在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。dynamic 在运行时错误了,也不会报错,它只在编译中存在。

 

 其次,编译的时间有所不同:
      int ,object,var 都会在编译是确定其数据类型,而dynamic则会将数据类型确定推迟到运行时才编译;使用var关键字申明变量,编译器会根据分配的实例类型确定此变量的类型,即类型推断,跟dynamic比,var并无任何运行时的动态特性,仅仅是编译器在编译时反向推断其类型,同直接用其编译时类型声明变量功能上是一样的。

用dynamic相当于你告诉编译器此对象的类型只在运行时确定,编译器不会试图干预。最终,你可以写更少的代码。但我要强调一下,相对于使用原有的object关键字,这样做不会增加任何危险。同样,也不会减少任何危险,所以当操作任何对象需要类型检查技术时(如反射),则使用dynamic对象会更好。

强调下:dynamic类型并没有跳过类型校验,只是延迟到了运行时。如果在运行时,检测到类型不兼容,他会会抛出异常。

  最后,使用的情况:

    int:声明一个整数类型的变量,随时可以使用;

    object:无法确定类型时使用,一般的使用对象较多;

    var:声明变量,接收对象时使用;

    sdynamic:使用少见,比较特殊,例举如下:

     1.COM对象
  2.动态语言(如IronPython,IronRuby等)对象
  3.反射对象;
  4.C# 4.0中动态创建的对象;

 

以上只是个人的经验,有不足之处希望大家指出,互相学习了!