栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢?

从最简单的示例开始:
复制代码 代码如下:
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;

编译:

可以看到对于表达式 obj +3 ,编译器器报告了错误,但是不会报 dyn+3 编译。

编译器不会检查包含dyn的表达式,原因在于 dyn 是 dynamic。

.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }

 

类型转换

修改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));

如果你是typeof(dynamic)会报typeof运算符无法用在动态类型上的错误

但是如果你写的是List 那么输出结果如下:

 
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }

可以看到输出时System.Object。

微软对此的解释是:

在大多数情况下, dynamic 类型与 object 类型的行为是一样的。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/127293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号