c# 中dynamic的使用

本文介绍了C#中dynamic关键字的应用,包括动态类型的使用方法及如何通过实现IDynamicMetaObjectProvider接口来自定义支持dynamic的对象。同时探讨了如何动态访问类型的静态成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

 

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

转载于:https://www.cnblogs.com/excaliburwyj/p/6906297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值