1. 普通委托(delegate)
声明:public delegate int MyDelegate(int a, int b);
用法:可以赋值、+=、-=,可以外部直接调用,参数和返回值类型自定义。
适合:需要自定义参数和返回值的场景。
2. 事件(event)
声明:public event MyDelegate OnEvent; 或 public event Action<int, string> OnEvent;
用法:只能用+=/-=添加/移除监听,只能在类内部Invoke,外部不能直接调用。
返回值:理论上可以有,但实际开发中极少用有返回值的事件(因为多订阅者时返回值没意义)。
适合:消息通知、UI事件、广播。
3. Action/UnityAction
声明:Action<int, string>, UnityAction<float>
用法:泛型指定参数类型,没有返回值。
适合:无返回值的回调、事件、Unity事件系统。
4. Func
声明:Func<int, int, string>(前面是参数,最后一个是返回值类型)
用法:泛型指定参数和返回值类型。
适合:有返回值的回调、算法、数据处理。
总结一句话
委托:参数和返回值都可以自定义,像函数指针。
事件:基于委托,主要用于通知/广播,实际开发中一般无返回值。
Action/UnityAction:无返回值的泛型委托,常用于事件和回调。
Func:有返回值的泛型委托,常用于回调和算法。