delegate/event以及Action/Function
using System.Collections; using System.Collections.Generic; using UnityEngine; public class E : MonoBehaviour { public delegate void Delegate(); public event Delegate OnCall; public Delegate OnCallDe; void init() { OnCall(); OnCallDe(); } } public class Test { E _a = new E(); public void Init() { //也可以用+= -= _a.OnCallDe = Onde; //这里报错不能用等于 //_a.OnCall = Onde; _a.OnCall += Onde1; } public void Onde() { Debug.LogError("Onde"); } public void Onde1() { Debug.LogError("-------------Onde1"); } public void Onde2() { if (_a.OnCallDe!=null){ _a.OnCallDe(); } //这里报错,不能在外部用用 //if (_a.OnCall!= null) //{ // _a.OnCall(); //} Debug.LogError("!!!!!!!!!Ond2e2"); } }
Action 跟 Fun 是c#对delegate的封装
Action委托具有Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,其中传入参数均采用泛型中的类型参数T,涵盖了几乎所有可能存在的无返回值的委托类型。
Func则具有Func<TResult>、Func<T,Tresult>、Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为出入参数,Tresult为返回类型。