C#4.0初探:dynamic 关键字
2009-05-29 08:31:21 来源:WEB开发网与关键字var的比较
从表面上看,dynamic与var关键字的用法很像,但实质上有本质区别。
var关键字被称为:隐含类型局部变量(Local Variable Type Inference),var只能用作局部变量,不能用于字段、参数等;声明的同时必须初始化;初始化时类型就已经明确了,并且不能再被赋值不能进行隐式类型转换的类型的数据;编译时编译器会对var定义的变量进行类型推断,这时变量的类型已经被确定。
dynamic可用于类型的字段,方法参数,方法返回值,可用于泛型的类型参数等;可以赋值给或被赋值任何类型并且不需显式的强制类型转换,因为这些是运行时执行的,这要得益于dynamic类型的动态特性。
与反射的比较
首先能看到的是,dynamic与反射相比,执行相同操作所需的代码少的多。
如调用类Me中的GetName()方法。
class Me
{
public string Blog { get; set; }
public string GetName()
{
return "Zhenxing Zhou";
}
}
用反射调用GetName()方法:
Assembly a = Assembly.GetExecutingAssembly();
object instance = a.CreateInstance("Xianfen.Net.TestDynamic.Me");
Type type = instance.GetType();
MethodInfo mi = type.GetMethod("GetName");
object result = mi.Invoke(instance, null);
同样的dynamic调用:
dynamic myInfo = new Me();
string result = myInfo.GetName();
dynamic类型与反射相比能进行的操作要少的多。
更多精彩
赞助商链接