15.C#和Unity自带委托的区别

  1. 15.CSharp和Unity自带委托的区别
    1. 15.1 题目
    2. 15.2 深入解析
      1. Action 和 Func
      2. UnityAction
      3. 区别
      4. 总结
    3. 15.3 答题示例
    4. 15.4 关键词联想

15.CSharp和Unity自带委托的区别


15.1 题目

C# 中的 Action 和 Func 是什么?Unity 中的 UnityAction 是什么?它们有什么区别?


15.2 深入解析

Action 和 Func

Action 和 Func 是 C# 中 System 命名空间下的预定义委托类型。

  • Action

    • Action 本身是一个无参数且无返回值的委托。
    • 泛型版本的 Action<T> 可以支持最多 16 个参数,但依然没有返回值。
    • 例如:
      Action action = () => Console.WriteLine("Hello, Action!");
      action();
      
      Action<int, string> actionWithParameters = (number, text) => Console.WriteLine($"{number}: {text}");
      actionWithParameters(1, "Hello, Action with parameters!");
      
  • Func

    • Func 本身是一个无参数但有返回值的委托。
    • 泛型版本的 Func<T, TResult> 可以支持最多 16 个参数,并且最后一个类型参数表示返回值的类型。
    • 例如:
      Func<int> func = () => 42;
      Console.WriteLine(func());
      
      Func<int, int, int> add = (a, b) => a + b;
      Console.WriteLine(add(1, 2));
      

UnityAction

UnityAction 是 UnityEngine.Events 命名空间下 Unity 提供的预定义委托类型。

  • UnityAction
    • UnityAction 本身是一个无参数且无返回值的委托。
    • 泛型版本的 UnityAction<T> 可以支持最多 4 个参数,且无返回值。
    • 例如:
      using UnityEngine;
      using UnityEngine.Events;
      
      public class Example : MonoBehaviour
      {
          void Start()
          {
              UnityAction action = () => Debug.Log("Hello, UnityAction!");
              action();
      
              UnityAction<int, string> actionWithParameters = (number, text) => Debug.Log($"{number}: {text}");
              actionWithParameters(1, "Hello, UnityAction with parameters!");
          }
      }
      

区别

  • 命名空间

    • Action 和 Func 位于 System 命名空间。
    • UnityAction 位于 UnityEngine.Events 命名空间。
  • 参数数量

    • Action 和 Func 的泛型版本可以支持最多 16 个参数。
    • UnityAction 的泛型版本可以支持最多 4 个参数。
  • 返回值

    • Action 和 UnityAction 本身都没有返回值。
    • Func 委托具有返回值。

总结

  • Action 和 Func 是 C# 中的预定义委托,适用于一般的委托使用场景。
  • UnityAction 是 Unity 提供的预定义委托,通常用于 Unity 事件系统中的回调函数。
  • 在使用场景上,Action 和 Func 更加通用,而 UnityAction 主要用于 Unity 框架内的事件处理。

15.3 答题示例

Action 和 Func 是 C# System 命名空间下的预定义委托类型。

  • Action 表示无返回值的委托,支持最多16个参数。
  • Func 表示有返回值的委托,最后一个泛型参数是返回值类型,最多支持16个参数。

UnityAction 是 UnityEngine.Events 命名空间下的委托,通常用于 Unity 事件系统,支持最多4个参数,无返回值。

区别主要在于命名空间、参数个数限制及返回值:

  • Action 和 UnityAction 无返回值,Func 有返回值。
  • Action/Func 支持最多16个参数,UnityAction 最多4个参数。
  • UnityAction 主要用于 Unity 内部事件回调,Action 和 Func 更通用。

15.4 关键词联想

  • C# 委托
  • Action
  • Func
  • UnityAction
  • 事件回调
  • 泛型委托
  • 返回值
  • UnityEngine.Events


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

×

喜欢就点赞,疼爱就打赏