源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C# Dynamic关键字之:解析dynamic就是Object

  • 时间:2022-05-13 16:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C# Dynamic关键字之:解析dynamic就是Object
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? [b]从最简单的示例开始: [/b]
[u]复制代码[/u] 代码如下:
static void Main(string[] args)         {             dynamic dyn = 1;             object obj = 1;             //在编译时将鼠标放到 ”dyn”  和”obj”中可以发现:              // dyn:局部变量 dynamic (dyn)             // obj: 局部变量object (obj)             System.Console.WriteLine(dyn.GetType());             System.Console.WriteLine(obj.GetType());         }
运行这段代码将显示 dyn 和obj 的运行时类型: System.Int32 System.Int32 在WriteLine方法后面增加两行: dyn = dyn + 3; obj = obj + 3; 编译: [img]http://files.jb51.net/file_images/article/201305/2013051409075618.png[/img] 可以看到对于表达式 obj +3 ,编译器器报告了错误,但是不会报 dyn+3 编译。 编译器不会检查包含dyn的表达式,原因在于 dyn 是 dynamic。   [b]类型转换 [/b] 修改Main代码如下: dynamic dyn = (dynamic)1; int j = (int)dyn; 可以看到1被强制转换成dynamic,然后又被强制转换回int. 然而dynamic可以隐式的转换成任何类型,并且也可以从其他类型中转换回来, 所以上面的代码和下面的等价: dynamic dyn = 1; int j = dyn; 修改Main代码增加如下代码: //下面这句话会无法通过编译,typeof 运算符无法用在动态类型上 //Console.WriteLine(typeof(dynamic)); Console.WriteLine(typeof(List<dynamic>)); 如果你是typeof(dynamic)会报typeof运算符无法用在动态类型上的错误, 但是如果你写的是List<dynamic> 那么输出结果如下:
[img]http://files.jb51.net/file_images/article/201305/2013051409075619.png[/img]
 
可以看到输出时System.Object。 [b]微软对此的解释是:[/b] 在大多数情况下,[b]dynamic 类型与 object 类型的行为是一样的[/b]。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部