“委托”:delegate,是一个引用。我们可以给这个引用,添加很多方法。我们调用(即运行)这个引用,可自动运行我们所有添加的方法。
delegate至少0个参数,至多32个参数
public Del mydel;
public delegate void Del();
private void OnEnable()
{
//添加方法
mydel += Method;
}
private void Start()
{
//调用委托
mydel?.Invoke();
}
void Method()
{
print(111);
}
//输出:
//111
该类委托,可给加上去的方法,传递统一的参数。
public Del mydel;
public delegate void Del(int value);
private void OnEnable()
{
//添加方法
mydel += Method01;
}
private void Start()
{
//调用委托
mydel?.Invoke(2);
}
void Method01(int value)
{
print(value);
}
//输出:
//2
public Del mydel;
public delegate int Del(int value);
private void OnEnable()
{
mydel += Method01;
}
private void Start()
{
print(mydel?.Invoke(111));
}
int Method01(int value)
{
return value + 111;
}
//输出:
//222
System.Action可给各方法传参,但无返回值。
Action action00;
Action<string> action01;
void OnEnable()
{
action00 += Method_00;
action01 += Method_01;
}
private void Start()
{
action00?.Invoke();
action01?.Invoke("Skode");
}
void Method_00()
{
print(0);
}
void Method_01(string value)
{
print(value);
}
//输出:
//0
//Skode
System.Func可传参,且有返回值
Func<int> 表示返回值为 int
Func <string,int> 表示有传入参数string,返回值int的委托
Func<int> func00;
//输入String,返回int
Func<string, int> func01;
private void OnEnable()
{
func00 += Method_00;
func01 += Method_01;
}
void Start()
{
print(func00?.Invoke());
print(func01?.Invoke("skode"));
}
int Method_00()
{
return 10;
}
int Method_01(string str)
{
return str.Length;
}
大家还有什么问题,欢迎在下方留言!