c# 中dynamic的使用

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)

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

时间: 2024-12-18 04:44:34

c# 中dynamic的使用的相关文章

【转】C#中dynamic的正确用法

原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = Get

C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.Writ

C#中dynamic的正确用法

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject();Console.WriteLine(dynamicObject.Name);Console.WriteL

改善C#程序的建议2:C#中dynamic的正确用法

原文:改善C#程序的建议2:C#中dynamic的正确用法 dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dyn

plsql dev中Dynamic Performance Tables not accessible分析解决(转)

使用plsql dev的朋友多遇到过类此如下面的提示: Dynamic Performance Tables not accessible, Automatic Statistics Disabled for this session You can disable statistics in the preference menu,or obtanin select priviliges on the v$session,v$sesstat and v$statname tables 一.产生

【转】改善C#程序的建议2:C#中dynamic的正确用法 空间

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject();Console.WriteLine(dynamicObject.Name);Console.WriteL

C#中Dynamic的妙用及代码重构

应用场景:检查几个表的特定字段是否为空,字段是否为空是在数据库中进行配置的.前台根据数据中字段的设置,进行动态检查. 原始人版: private string CheckFieldNull(MONTHINPUTDATA data,IList<ReportTemplate> shownFields) { IList<string> result = new List<string>(); if (data.UT_003 != null) { var dataObj = d

C#中Dynamic关键字

dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能. 什么是"动态"? 编程语言有时可以划分为静态类型化语言和动态类型化语言.C#和Java经常被认为是静态化类型的语言,而Python.Ruby和JavaScript是动态类型语言. 一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型.这种方法有利有弊:代码编写起来更快.更容易,但无法获取编译器错误,只能通过单元测试和其他方法来确保应用正常运行. C#最初是作为纯静态语言创建的,但是C#4

java中dynamic web project与web project 的区别 [转]

原帖地址:http://blog.sina.com.cn/s/blog_46726d2401013jlk.html 文章框架: 1.Dynamic  Web Project 概念 2.eclipse 中的动态Web 项目与 Myeclipse 中的web项目有何区别 3.动态的运行原理及目录结构---是否都涉及到由类生成表的技术(如果没的话,也应该 把这个搞清楚) 4,如何建立server? 5.如何建立一个动态Web?要知道各配置文件的作用 6.熟悉auction项目 ------------