本文摘自PHP中文网,作者大家讲道理,侵删。
(一)DLRC#4的动态功能是Dynamic Language Runtime(动态语言运行时,DLR)的一部分。DLR是添加到CLR的一系列服务。
(二)dynamic类型
dynamic类型允许编写忽略编译期间的类型检查的代码。编译器假定,给dynamic类型的对象定义的任何操作都是有效的,在运行之前编译器不会检测是否存在错误。
例子:
1 |
|
这两行代码能够通过编译器编译,但是点击运行后会报错:
需要注意的是,dynamic类型虽然很有用,但是它是有代价的。
(三)包含DLR ScriptRuntime
给应用程序添加脚本编辑功能,并给脚本传入数值和从脚本传出数值,是应用程序可以利用脚本完成工作。
(四)DynamicObject和ExpandoObject
从DynamicObject中派生或者使用ExpandoObject可以创建自己的动态对象。
使用DynamicObject派生创建动态对象,需要重写3个方法TrySetMembe()、TryGetMember()和TryInvokeMember()。
使用ExpandoObject与DynamicObject进行派生的区别在于不用重写方法。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
运行以上代码,结果如下:
以上就是C#高级编程 第十二章 动态语言扩展 的详细内容!
相关阅读 >>
更多相关阅读请进入《动态语言扩展》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。