lua实现c#事件机制

本文介绍了一种使用事件和响应函数进行编程的方法,通过创建事件对象并注册响应方法,实现了事件触发时自动执行相应操作。以按钮点击事件为例,展示了如何创建窗口对象、注册事件、定义事件方法及调用事件机制,最终实现按钮点击后的特定行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


--通过table来保存注册事件的若干响应函数,然后拿table当function来调用,重写__call后,实现调用table时遍历执行table中的注册方法
--事件原型,所有事件有此原型生成
Event={}
  
function Event:New()
 local event={};
 setmetatable(event,self);
 --覆盖__index逻辑
 self.__index=self;
 --覆盖__call逻辑
 self.__call=self.Call;
 return event;
end

--注册事件,通过该方法将响应事件的方法注册到该事件上@source:响应方法所属的对象;@func响应方法
function Event:Add(source,func)
 table.insert(self,{source,func});
end

function Event.Call(tb,arg)
 for _,item in ipairs(tb) do
  --item[1]是事件源,item[2]func是事件方法
  item[2](item[1],arg)
 end
end

--创建windows对象,注册按钮的点击事件
Windows={
   Name="beyond windows",
  }
function Windows:Init()
 --注册事件,self即windows事件源
 Button.ClickEvent:Add(self,self.Button_OnClick)
end

--事件方法,self即传进来的button
function Windows:Button_OnClick(sender)
 print(sender.Name.." Click On "..self.Name) 
end

--创建一个button对象,调用clickevent事件
Button={
   Name="A Button",
  --创建事件
  ClickEvent=Event:New(),
  }
  
--执行按钮的点击动作
function Button:Click()
 print("Click begin")
 self.ClickEvent(self)
 print("Click end")
end

--执行
Windows:Init();
Button:Click();

执行结果:执行结果已经放到下面了啊,怎么还在文中呢??恩 好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值