C#4中dynamic var object区别
相同点:
三者都可以接受任何类型的实例,比如:
Class myClass
{
public int Add(int a,int b)
{
return a+b;
}
}
object oObj = new myClass();
var vObj = new myClass();
dynamic dObj = new myClass();
不同点:
1。object无法直接调用对应实例的方法或属性,而var 和 dynamic都可以
比如 vObj.Add(1,2)或 dObj.Add(1,2)都是可以的,而 oObj.Add(1,2)就编译报错
2。var的类型检查在编译时,dynamic的类型检查在运行时;
比如vObj.Minus(1,2)编译时会报错“方法不存在”,而 dObj.Minus(1,2)在运行时才会报错
3。var支持intellisense,在vs编辑器中可推测出所得类型,进而可以实时提示方法属性,而dynamic则不行
注:
1。var是C# 3.5引入的,Dynamic 是C#4 中新引入关键字
2。var更多用于Linq
3。Dynamic可使反射变得简单
比如要通过上边的oObj调用方法,通常是:
System.Reflection.MethodInfo method = oObj.GetType().GetMethod("Add");
method.Invoke(oObj, new Object[] { 1, 2 });
而通过Dynamic,可以这样:
Dynamic dNewObj=oObj;
dNewObj.Add(1,2);
这种做法不止是编写简单,执行效率上由于有编译缓存同样比原先的直接反射要效率高。
浙公网安备 33010602011771号