本文主要是介绍delegate(委托),Event(事件),Action,Func,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
delegate(委托)是函数的容器,会定义一个函数的模板。
public delegate void xxxx()
Event(事件)本质上也是Delegate,但是赋值的权限设置成了Private
public event xxxx delegate1()
Action是delegate的简写,是C#给我们封装好的一种写法
public Action xxxx()
Func既可以执行函数,也可以获得返回值,其括号内最后一个类型就是返回值
delegate
例子:
public delegate void Help(int a); // 委托(函数的容器)
public class testooo : Singleton<testooo>
{public Help p; // 将委托实例化public void Hello(int a){Debug.Log(a);}
}
public class TestSendMsg : MonoBehaviour
{void Start(){Help p;p = testooo.Instance.Hello;p?.Invoke(1008666);}
}
Action
其实就是C#把定义委托和将委托实例化封装成一句代码了,效果是一样的:
public class testooo : Singleton<testooo>
{public Action<int> p; // 同时定义委托和将委托实例化public void Hello(int a){Debug.Log(a);}
}
public class TestSendMsg : MonoBehaviour
{void Start(){Action<int> p;p = testooo.Instance.Hello;p?.Invoke(1008666);}
}
event:
public delegate void Help(int a); // 委托(函数的容器)
public class testooo : Singleton<testooo>
{public event Help p; // 将委托实例化private void Start(){p = Hello;p?.Invoke(1);} public void Hello(int a){Debug.Log(a);}
}
在其它类中无法对testooo类的p进行赋值。
public class TestSendMsg : MonoBehaviour
{Help p;void Start(){testooo.Instance.p = eee; // 这是会报错的}
}
Func:
public class testooo : Singleton<testooo>
{public Func<int, int> p; // 将委托实例化public void Start(){p = Hello;Debug.Log("^^^^^^^^^^^^^^^^^^^^");}public int Hello(int a){return a * 10;}
}
public class TestSendMsg : MonoBehaviour
{void Start(){testooo.Instance.Start();//因为是不继承mono的单例所以要调用一下Debug.LogError(testooo.Instance.p(1));}
}
输出结果:
10
注意:继承mono的单例中的生命周期方法(Awake,Start,Update)都是走的unity的生命周期。但是如果单例没有继承mono,那么它的这些方法就不会被自动调用,没法走生命周期。
这篇关于delegate(委托),Event(事件),Action,Func的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!