时间:2021-05-20
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<dynamic>));
如果你是typeof(dynamic)会报typeof运算符无法用在动态类型上的错误,
但是如果你写的是List<dynamic> 那么输出结果如下:
可以看到输出时System.Object。
微软对此的解释是:
在大多数情况下,dynamic 类型与 object 类型的行为是一样的。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
接上文:C#Dynamic关键字之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)为什么TryXXX方法没有被调
dynamic关键字和动态语言运行时(DLR)是.Net4.0中新增的功能。什么是"动态"? 编程语言有时可以划分为静态类型化语言和动态类型化语言。C#和Ja
在理解var和dynamic关键字之前,让我们先了解一下编程语言的类别。C#中有两类编程语言:静态类型语言类别动态语言类别静态类型语言静态类型语言也被称为强类型
dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译期默认dyna
dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译期默认dynami