c# 中dynamic的使用

时间:2022-02-20 01:02:43

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)

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