委托
定义:能够存储具有相同参数的方法
将一个方法传入到另一个方法内
委托的用法:
//委托写在类上,命名空间下
//声明委托
public delegate void 委托名(参数);
//实例化委托//不需要写()
委托名 委托对象=其他方法;
委托对象(参数);
匿名函数
相比委托,减少了实例化的步骤
匿名函数的用法:
/匿名函数的返回值类型要和委托的一致,是否有返回值也要一致
//委托的声明,这个跟委托一样
public delegate void 委托名;
委托名 委托对象=delegate(参数)
{
方法体(例如Console.WriteLine())
}; 在这里一定要加冒号(;)
luada表达式
定义:就是一个特殊的匿名函数
luada表达式的写法
//定义委托
public delegate void 委托名;
//luama表达式,委托那边有返回类型和返回值,这边相对对应的就要有
委托名 委托对象=(参数l)=>{方法体};
委托对象(传参)
事件,Action
事件是一个特殊的委托,简化了委托。
事件不能有返回值。
事件的书写:
/声明事件
private Action 有返回值时<类型>/// 事件名;
事件名 =其他方法的方法名;
//当有返回类型时,判断是否为空
事件名?.Invoke(传参);
实例:
public class jiekou : MonoBehaviour
{
private delegate void SayHi(string name);
private Action <string> _actionprint;
void Start()
{
//SayHi sayhi = SayHiChinese;
_actionprint += SayHiChinese;
_actionprint?.Invoke("男儿当自强");
//sayhi("李华");
}
public static void SayHiChinese(string name)
{
print("你好中国"+name);
}
public static void SayHiEnglish(string name)
{
print("hello American");
}
}
Func函数
func的定义:func是一个特殊的匿名函数
func必须要有返回值
func的书写:
///声明
private Func<参数类型(有几个写几个,用逗号隔开),返回的类型> Fuc名;
///
func名=其他函数名;
方法体
例如(值=fuc名.Invoke(传参))
练习
public class jiekou : MonoBehaviour
{
private Func<string, string, int> _fucnumber;
void Start()
{
_fucnumber += PrintNumber;
var sum = _fucnumber("12", "16");
Debug.Log(sum);
}
public static int PrintNumber(string s1,string s2)
{
int sum = int.Parse(s1) + int.Parse(s2);
return sum;
}
}