码迷,mamicode.com
首页 > Windows程序 > 详细

c# 中dynamic的使用

时间:2017-05-25 23:33:38      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:new   object   provider   反射技术   查询   输出   操作   mic   随机数   

dynamic 是c#中的一个关键字,用来表示动态类型,即在运行时确定类型。

dynamic value;

Random ran = new Random();//生成随机数

value = ran.Next(0, 10) > 5 ? (dynamic)1 : (dynamic)"A";

dynamic display = value + value;

Console.WriteLine(value);

 

程序输出随着随机数变化而不确定,

当随机数小于5时 value = 1,display=1 + 1 最后输出2;

当随机数大于5时 value = “A”,display = “A” + “A” 最后输出“AA”;

 

dynamic本质上是object,方法不能靠dynamic和object来区分

即Method(object o)和Method(dynamic d)其实是一样的。

 

如果想要使自定义的类型支持dynamic ,需要实现IDynamicMetaObjectProvider接口,其中有GetMetaObject方法,返回DynamicMetaObject的一个派生类型,

这个类型可以处理自定义类型对象的方法、字段、属性等

 

dynamic只能支持访问实例对象的方法、字段、属性,因为dynamic必须是一个对象。如果想要动态访问类型的静态成员,可以定义一个

StaticDynamic类型派生自System.Dynamic.DynamicObject,重载其中

public override bool TryGetMember(GetMemberBinder binder, out object result)

public override bool TrySetMember(SetMemberBinder binder, object value)

 public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)

 

重载方法,使用反射技术查询类型静态成员,并加以操作。

c# 中dynamic的使用

标签:new   object   provider   反射技术   查询   输出   操作   mic   随机数   

原文地址:http://www.cnblogs.com/excaliburwyj/p/6906297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!