admin管理员组文章数量:1794759
C# 回调函数详解
回调和回调函数是什么
软件模块之间存在着接口,而回调是一种双向调用模式,被调用方在接口被调用时也会调用对方的接口。 对于一般的结构化语言,可以通过回调函数来实现回调。回调函数是一个函数或过程,是一个由调用方自己实现,供被调用方使用的函数。 对于C和C++来说,一般通过函数指针实现调用。 对于C#来讲,声明的委托事件就像一个指针,通过事件变量来调用另外的方法,将该方法作为参数传递给另一个方法。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。
怎么实现?通过声明委托来实现回调。 我们在C#编程经常会遇到事件触发流程,定义这个事件的方法就是回调函数。回调函数实际上就是将某种行为即方法存储下来,在需要的时候进行调用。它通过委托实现,并不一定是事件还是委托变量来调用。 先看一个典型C#委托声明代码:
public delegate void EventHandler( object sender , EventArgs e )其中object sender:表示触发事件的控件对象 ,sender参数用于传递指向事件源对象的引用。使用sender 可以查出触发事件的具体控件。 EventArgs是包含事件数据的类的基类,用于传递事件的细节,是一些事件附属的信。
using System; namespace 回调函数 { //1.声明关于事件的委托; public delegate void AlarmEventHandler(object sender, EventArgs e); class Dog { //2.声明事件; public event AlarmEventHandler Alarm; //3.编写引发事件的函数; public void OnAlarm() { if (this.Alarm != null) { Console.WriteLine("\\n汪汪~~~~~~~"); this.Alarm(this, new EventArgs()); //发出警报 } } } //事件接收者 class Host { //4.编写事件处理程序 void HostHandleAlarm(object sender, EventArgs e) { Console.WriteLine("主人: 吓死宝宝!"); } //5.注册事件处理程序 public Host(Dog dog) { dog.Alarm += new AlarmEventHandler(HostHandleAlarm); } } class Thief { void ThiefHandleAlarm(object sender, EventArgs e) { Console.WriteLine("小偷: 吓死宝宝!"); } public Thief(Dog dog) { dog.Alarm += new AlarmEventHandler(ThiefHandleAlarm); } } class Program { static void Main(string[] args) { Dog dog = new Dog(); Host host = new Host(dog); Thief thief = new Thief(dog); //当前时间,从2021年3月9日23:59:50开始计时 DateTime now = new DateTime(2021, 3, 9, 23, 59, 55); DateTime midnight = new DateTime(2021, 3, 10, 0, 0, 0); //等待午夜的到来 Console.WriteLine("时间一秒一秒地流逝... "); while (now < midnight) { Console.WriteLine("当前时间: " + now); System.Threading.Thread.Sleep(1000); //程序暂停一秒 now = now.AddSeconds(1); //时间增加一秒 } Console.WriteLine("\\n月黑风高的午夜: " + now); Console.WriteLine("小偷悄悄地摸进了女主人的屋内... "); dog.OnAlarm(); Console.ReadLine(); } } }参考文章: 理解C#回调函数 C# (事件触发)回调函数,完美处理各类疑难杂症!
版权声明:本文标题:C# 回调函数详解 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686490317a73374.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论