C#中动态语言扩展的示例分析
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章给大家分享的是有关C#中动态语言扩展的示例分析 的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。(一)DLRC#4的动态功能是Dynamic Language Run
千家信息网最后更新 2024年11月24日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安全错误
数据库的锁怎样保障安全
软件开发履行情况
与网络技术相关的考研专业
怎么进入自己的服务器
wind数据库免费吗
数据库查找一条数据的过程
网络安全的5字名言警句
数据库redo日志组
河北网络技术信息优点
网络安全 班会课
服务器安装后没有显示器驱动
编程软件开发大全
娄底软件开发app报价多少
新余服务器费用多少
SQL数据库作业设计代做
java版服务器1.16.5推荐
泉州易捷软件开发有限公司
2019软件开发面试题
中职学校网络安全应急预案
idc机房网络安全建设
ajax文件在服务器位置怎么看
全国省市区县数据库文档
正宏数据库开发语言
网络安全主动战
我要观看网络安全知识宣传手抄报
电信宽带无法连接服务器是为什么
阿里服务器散热是放在水里吗
主流的软件开发语言
软件开发的基本原料是什么
浦东新区电商软件开发成本价
冰箱无法连接服务器