C#是一种类型安全的编程语言(所有表达式都能解析成某个类型的实例,在编译器生成的代码中,只会执行对这个类型有效的操作),和非类型安全的语言相比,类型安全的优势就体现出来了:
1.许多错误能在编译时检测到,取保代码在执行它之前是正确的。
2.编译时语言通常能生成更小,更快的代码。(在编译时进行更多的假设,并在IL和元数据中落实那些假设)
为了方便开发人员使用反射或者与基本组件通信,dynamic诞生了!
一下代码展示了如何利用反射在一个String目标("根据我找类型")上调用一个方法(“Contains”),向它传递一个实参(“我只是一个string参数”),并将结果存储到局部变量result中。
object[] argm = new object[] { arg};
Boolean result=Convert.ToBoolean(method.Invoke(target,argm));
}
dynamic od = 123;//(装箱)
dynamic os = "dsfsdf";
Int32 ns = os;//运行时报错。
Int32 nd = od;//从dynamic隐式转换为int32(拆箱)
//在本例中可看出,dynamic转为其他类型时,允许省略显示转型。
//但是CLR会在运行时验证转型,确保类型安全。如果对象类型不兼容要转换成的类型,clr就会抛出一个InvalidCastException异常。
}
新闻热点
疑难解答