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

相关推荐
开开心心就好2 小时前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
CSharp精选营2 小时前
.NET 面试必问的 8 道 GC 题,建议收藏
.net·面试题·gc·c#面试题
QQ_21696290962 小时前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
未来之窗软件服务11 小时前
C# 截图源码支持自动保存-东方仙盟
c#·仙盟创梦ide·东方仙盟·电脑工具
UIU1141 天前
-7 / 2 在 C 里是 -3,在 Python 里是 -4,谁算错了?
c++·学习·c#
wflynn1 天前
GitHub 今日推荐|REDox:64 位 token 表示结构化数据,内存占用降 70% 支持多格式互转
开源·c#·github
驰骋工作流1 天前
C#/.NET 开源BPM工作流引擎6大常用对比选型分析驰骋BPM驰骋低代码低代码工作流引擎
开源·c#·.net
en.en..1 天前
C语言 fp与fd 区别详解
c#
淡海水2 天前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
BD_Marathon2 天前
多轮对话聊天机器人
开发语言·机器人·c#