4.回调函数的定义和使用

  1. 4.回调函数的定义和使用
    1. 4.1 题目
    2. 4.2 深入解析
      1. 使用场景
    3. 4.3 答题示例
    4. 4.4 关键词联想

4.回调函数的定义和使用


4.1 题目

回调函数指什么?一般在什么时候使用?至少列举3种使用场景。


4.2 深入解析

在程序设计中,回调函数指的是将一个函数作为参数传递给另一个函数,并在另一个函数执行完毕后被调用的函数。在C#中,回调函数一般以委托的形式出现。

使用场景

  1. 异步编程

    • 当需要执行一些异步逻辑,并在异步逻辑执行完毕后执行某些操作时,可以使用回调函数。
    • 示例代码:
      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();
          }
      }
      
  2. 事件中心

    • 在事件驱动的编程模型中,可以使用回调函数来响应事件的触发。
    • 示例代码:
      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();
          }
      }
      
  3. 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 答题示例

“回调函数就是将一个函数(或委托)当作参数传入另一个函数,在特定时刻或条件下由被调用者执行,用于实现异步通知或解耦逻辑。常见场景:

  1. 异步操作完成通知——网络请求、文件 I/O、Task 完成时调用回调;
  2. 事件驱动——UI 按钮点击(onClick)、自定义事件中心(event Action)触发时调用;
  3. 定时器/协程回调——延迟执行逻辑或每帧更新时传入回调;
  4. 自定义算法钩子——遍历、排序、搜索等算法中传入比较或处理函数;
  5. 生命周期钩子——对象创建、销毁或状态变化时执行注册回调。”

4.4 关键词联想

  • 回调(Callback)
  • 委托/Action/Func
  • 异步完成通知
  • 事件驱动(Event)
  • UI onClick
  • 定时器/协程
  • 算法钩子(Hook)
  • 解耦合/扩展点


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏