dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程序还是会抛出RuntimeBinderException异常。
var 与 dynamic 的区别
var是编译器给我们的语法糖,编译期会匹配出实际类型并且替换该变量的声明。
dynamic 被编译后,实际是一个object类型,只不过编译器对dynamic做特殊处理,将类型检查放到了运行期。
这从VS的编译器窗口可以看出来,var 声明的变量在VS中有智能提示,因为VS能推断出来实际类型;dynamic声明的变量没有智能提示。
利用dynamic 简化反射 www.yztrans.com
public class DynamicSample
{
public string Name { get; set; }
public int Add(int a, int b)
{
return a + b;
}
}
public partial class DynamicPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//普通的反射做法
DynamicSample dynamicSample = new DynamicSample();
var addMethod = typeof(DynamicSample)。GetMethod("Add");
int res = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });
//dynamic的做法,简洁,推荐
dynamic dynamicSample2 = new DynamicSample();
int res2 = dynamicSample2.Add(1, 2); //Add不会智能提示出来
}
}
使用dynamic还有一个优点就是,比没有优化过的反射性能好,跟优化过的反射性能相当 www.lefeng123.com
相关文章
- 11-18[CareerCup] 3.1 Implement Three Stacks using Array 使用数组来实现三个栈
- 11-18使用OCR来帮助LR实现认证码识别
- 11-18python – 使用两个不同的decorator实现来装饰所有类方法的Metaclass
- 11-18python – 使用类装饰器来实现后期初始化
- 11-18DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架
- 11-18如何使用 OKR 来实现分布式团队的战略执行
- 11-18不使用路由器来实现不同网段(子网)计算机之间通信的方法
- 11-18使用wxpy来实现自动发送消息统计微信好友信息的功能
- 11-18loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
- 11-18python – 我如何使用向量来实现与此相同