C#中动态语言扩展的示例分析
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章给大家分享的是有关C#中动态语言扩展的示例分析 的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。(一)DLRC#4的动态功能是Dynamic Language Run
千家信息网最后更新 2025年01月25日C#中动态语言扩展的示例分析
这篇文章给大家分享的是有关C#中动态语言扩展的示例分析 的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
(一)DLR
C#4的动态功能是Dynamic Language Runtime(动态语言运行时,DLR)的一部分。DLR是添加到CLR的一系列服务。
(二)dynamic类型
dynamic类型允许编写忽略编译期间的类型检查的代码。编译器假定,给dynamic类型的对象定义的任何操作都是有效的,在运行之前编译器不会检测是否存在错误。
例子:
dynamic person = "人";string firstName = person.FirstName;
这两行代码能够通过编译器编译,但是点击运行后会报错:
需要注意的是,dynamic类型虽然很有用,但是它是有代价的。
(三)包含DLR ScriptRuntime
给应用程序添加脚本编辑功能,并给脚本传入数值和从脚本传出数值,是应用程序可以利用脚本完成工作。
(四)DynamicObject和ExpandoObject
从DynamicObject中派生或者使用ExpandoObject可以创建自己的动态对象。
使用DynamicObject派生创建动态对象,需要重写3个方法TrySetMembe()、TryGetMember()和TryInvokeMember()。
使用ExpandoObject与DynamicObject进行派生的区别在于不用重写方法。
例子:
class Program{ static void Main(string[] args) { FuncgetFullName = (f, l) => { return f + " " + l; }; dynamic byexobj = new ExpandoObject(); byexobj.FirstName = "李"; byexobj.LastName = "四"; byexobj.GetFullName = getFullName; Console.WriteLine(byexobj.GetType()); Console.WriteLine(byexobj.GetFullName(byexobj.FirstName, byexobj.LastName)); Console.WriteLine("====================="); dynamic dyobj = new MyDynamicObject(); dyobj.FirstName = "张"; dyobj.LastName = "三"; dyobj.GetFullName = getFullName; Console.WriteLine(dyobj.GetType()); Console.WriteLine(dyobj.GetFullName(dyobj.FirstName, dyobj.LastName)); Console.ReadKey(); }}public class MyDynamicObject : DynamicObject{ Dictionary dynamicData = new Dictionary (); public override bool TrySetMember(SetMemberBinder binder, object value) { dynamicData[binder.Name] = value; return true; } public override bool TryGetMember(GetMemberBinder binder, out object result) { bool success = false; result = null; if (dynamicData.ContainsKey(binder.Name)) { result = dynamicData[binder.Name]; success = true; } else { result = "未找到该属性的值"; success = false; } return success; } public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { dynamic method = dynamicData[binder.Name]; result = method((string)args[0],(string)args[1]); return result != null; }}
运行以上代码,结果如下:
感谢各位的阅读!关于"C#中动态语言扩展的示例分析 "这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
动态
类型
编译
脚本
运行
语言
代码
对象
编译器
示例
C#
分析
例子
内容
功能
应用程序
数值
方法
更多
程序
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京智农天地网络技术
ios安装软件开发
网络安全知识竞赛多选题答案
十荟团互联网科技有限公司
儿童手抄报网络安全知识
缓存服务器硬盘选购
数据库的水平划分
工控网络安全运营
中国维普数据库
公司网络技术建设
亿橙网络技术有限公司
中石油石化 网络安全
软件开发定制外包7
登录app显示服务器设置
app服务器与客户端安全
力控科技工业互联网方案
温州市鹿城区橙琪网络技术工作室
过程数据库 冗余
服务器的热插拔电源好不好
网络安全管理培训会议纪要
万国觉醒服务器分苹果和安卓
中科腾海高清服务器资料
软件开发需要接触什么
怀旧服tbc服务器会合并吗
网络安全岗位责任书
护苗网络安全课全五离婚
新建数据库并导入数据文件
xp svn 服务器
永州管理软件开发价格
国企软件开发忙吗