4.回调函数的定义和使用
4.1 题目
回调函数指什么?一般在什么时候使用?至少列举3种使用场景。
4.2 深入解析
在程序设计中,回调函数指的是将一个函数作为参数传递给另一个函数,并在另一个函数执行完毕后被调用的函数。在C#中,回调函数一般以委托的形式出现。
使用场景
异步编程:
- 当需要执行一些异步逻辑,并在异步逻辑执行完毕后执行某些操作时,可以使用回调函数。
- 示例代码:
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { await DoAsyncWork(() => { Console.WriteLine("异步逻辑执行完毕,执行回调函数。"); }); } static async Task DoAsyncWork(Action callback) { // 异步逻辑执行完毕后调用回调函数 await Task.Delay(1000); callback(); } }
事件中心:
- 在事件驱动的编程模型中,可以使用回调函数来响应事件的触发。
- 示例代码:
using System; class EventPublisher { public event Action<string> OnEventTriggered; public void TriggerEvent() { OnEventTriggered?.Invoke("事件触发了!"); } } class Program { static void Main(string[] args) { var publisher = new EventPublisher(); publisher.OnEventTriggered += (message) => { Console.WriteLine(message); }; publisher.TriggerEvent(); } }
UI界面中的控件逻辑回调:
- 在UI界面中,当用户触发某些操作(如按钮点击)时,可以使用回调函数来执行相应的逻辑。
- 示例代码(Unity中的按钮点击回调):
using UnityEngine; using UnityEngine.UI; public class ButtonClickHandler : MonoBehaviour { void Start() { Button button = GetComponent<Button>(); button.onClick.AddListener(() => { Debug.Log("按钮被点击了!"); }); } }
回调函数的使用场景不限于上述三种,根据具体的需求和场景,可以灵活地运用回调函数来实现逻辑的解耦和扩展。
4.3 答题示例
“回调函数就是将一个函数(或委托)当作参数传入另一个函数,在特定时刻或条件下由被调用者执行,用于实现异步通知或解耦逻辑。常见场景:
- 异步操作完成通知——网络请求、文件 I/O、Task 完成时调用回调;
- 事件驱动——UI 按钮点击(
onClick)、自定义事件中心(event Action)触发时调用;- 定时器/协程回调——延迟执行逻辑或每帧更新时传入回调;
- 自定义算法钩子——遍历、排序、搜索等算法中传入比较或处理函数;
- 生命周期钩子——对象创建、销毁或状态变化时执行注册回调。”
4.4 关键词联想
- 回调(Callback)
- 委托/Action/Func
- 异步完成通知
- 事件驱动(Event)
- UI onClick
- 定时器/协程
- 算法钩子(Hook)
- 解耦合/扩展点
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com