当前位置: 首页 > news >正文

AScript之事件处理脚本

AScript是一个开源的C#动态脚本解析执行引擎,脚本中支持定义事件处理。

一、Lambda委托

 1 var s = @"
 2 var p = new Person('tom', 20);
 3 p.Saying += (ss,ee)=>{
 4     (ss as Person).Age+=1;
 5 }
 6 p.SayHello();
 7 ";
 8 var script = new Script();
 9 script.Context.AddType<Person>();
10 Assert.AreEqual("Hello, my name is tom, I'm 21 years old", script.Eval(s));

直接添加Lambda委托事件,该方式无法移除事件处理。

二、方法委托

 1 var s = @"
 2 void saying(object sender, EventArgs e) {
 3     (sender as Person).Age+=1;
 4 }
 5 var p = new Person('tom', 20);
 6 p.Saying += saying;
 7 p.SayHello();
 8 // 可以在脚本中移除事件处理
 9 // p.Saying -= saying;
10 ";
11 var script = new Script();
12 script.Context.AddType<Person>();
13 Assert.AreEqual("Hello, my name is tom, I'm 21 years old", script.Eval(s));
14 // 外部调用触发事件
15 var p = script.Eval<Person>("p");
16 Assert.AreEqual("Hello, my name is tom, I'm 22 years old", p.SayHello());
17 // 外部移除事件处理
18 var handle = script.Context.GetEvent<EventHandler<EventArgs>>("saying");
19 p.Saying -= handle;
20 Assert.AreEqual("Hello, my name is tom, I'm 22 years old", p.SayHello());

添加方法委托事件处理,该方式可以在脚本中移除事件处理,也可以外部移除,灵活控制。

结束语

通过引入事件处理,为动态脚本增加了强大的扩展能力,比如在窗体应用动态脚本中添加控件事件处理,为程序实现更多的动态扩展能力。

AScript开源地址:https://gitee.com/rockey627/AScript

http://www.rkmt.cn/news/1462391.html

相关文章:

  • 计算机毕业设计之基于Python的个性化岗位分析及可视化
  • 西安 GEO 优化科普:3 分钟看懂 GEO 优化公司成功案例的可复制经验
  • MonkeyCode私有化部署实战:3步搭建企业内网AI编程环境
  • 惠州头部品牌装饰企业实力排行 实测客观对比 - 互联网科技品牌测评
  • Arduino起重机DIY:从纸板结构到电机控制的完整实践指南
  • 跨越编译障碍:Dlib Windows预编译包的技术架构与性能优化实践
  • 基于RTK GPS与Arduino的自主割草机器人:从原理到实践
  • IOTA 学习笔记(十一):共享对象与多用户交互
  • 上海牛肉汉堡品牌加盟推荐:现煎现烤工艺优势解析 - 17322238651
  • PyTorch图像增强避坑指南:ColorJitter里hue参数设置为什么不能超过0.5?一次搞懂HSV色彩空间
  • YY/T0681.5-2010气泡法检漏标准详解、取样数量要求
  • JAVA EE初阶---DAY 1 计算机是如何工作的
  • 3大核心优势+7步实战:SPT-AKI存档编辑器完全指南
  • Arduino I²C EEPROM存储实战:从24LC512原理到可靠数据读写
  • PyWxDump终极指南:如何安全备份与导出微信聊天记录
  • 深度解析IDM激活脚本的系统集成架构与安全实现方案
  • 6.4
  • 圆偏振光屏幕保护膜技术原理深度解析——从偏振光学到 scinique® 1.0 双护方案
  • 上海APP开发公司哪家性价比高?企业做APP定制开发怎么选?
  • PortSwigger SQL注入LAB11
  • DC-DC转换器在线测量电池交流内阻:下采样与FIR滤波算法实践
  • 终极B站视频下载指南:BilibiliDown让你轻松保存任何B站视频
  • 腾讯云原厂采购 VS 官方代理合作,企业选型参考指南
  • 杭州婚恋服务机构盘点:合规服务与匹配能力对比 - 互联网科技品牌测评
  • 自适应双频段能量采集电路设计:提升水下物联网设备续航能力
  • 3大核心技术突破:如何在NVIDIA显卡上实现AMD FSR 3帧生成技术
  • LD3320语音识别模块开发包:含DXP原理图、STC51例程、串口调试工具与实操录像
  • 10分钟搞定UltraStar Deluxe:跨平台卡拉OK游戏快速上手指南
  • 江苏切削液厂家实力盘点:五家头部供应商客观对比 - 奔跑123
  • 探索开源放射治疗计划系统matRad:从算法研究到临床教学的全新视角