C#有四种常用委托
Delegate
Action
Func
EventHandler
他们有什么关联和区别?
Delegate是最强大的委托,开发人员可以自定义参数个数,默认值,泛型等等。缺陷就是声明麻烦,而且要专门写一个全局Delegate定义。不然只能在类内部使用,普适性低。
因为声明Delegate很麻烦,所以就产生了另外三个事先声明好的Delegate,目的就是为了简化Delegate。直接看代码最容易理解:
//Action做的简化是,去掉返回值,省略参数定义
public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
//Func和Action差不多,但是有返回
public delegate TResult Func<T, TResult>(T arg1);
//EventHandler这是最接近通用事件的写法,传递了派发者和参数
public delegate void EventHandler(object sender, EventArgs e);
Unity自带的UnityAction和UnityEvent原理差不多,那是为了Unity自身定制的,结合MonoBehavior可以在编辑器里时手动修改事件。优点是方便,缺点效率比普通的要差。