参考:
https://blog.csdn.net/wnvalentin/article/details/81840339#5%20Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F
逆变:
https://blog.csdn.net/w200221626/article/details/52370980
官方:
https://docs.microsoft.com/zh-cn/dotnet/csharp/delegate-class
定义委托类型
定义一个委托便是定义一个类型
形式:
[访问修饰符] delegate 返回值类型 委托名 (形参列表);
public delegate void Comparison(int count);
实例化委托
public delegate void CallBackListener(string msg);
void OnCallBack1(string msg)
{
Debug.Log("OnCallBack1: " + msg);
}
void OnCallBack2(string msg)
{
Debug.Log("OnCallBack2: " + msg);
}
void test()
{
CallBackListener listener = new CallBackListener(OnCallBack1);
//或
listener = OnCallBack1;
listener("hello");
listener.invoke("hi");
}
多播:
listener = OnCallBack1;
listener += OnCallBack2;
listener -= OnCallBack2;
补充
泛型委托:
public delegate int Comparison<T>(T left, T right);
逆变泛型委托:
public delegate int Comparison<in T>(T left, T right);
public delegate int Comparison1<T>(T left, T right);
public delegate int Comparison2<in T>(T left, T right);
int tfun<T>(T left,T right)
{
Debug.Log("type:" + left.GetType().ToString());
Debug.Log("tfun1:"+left.ToString());
return 0;
}
void test()
{
//泛型
Comparison1<int> c1 = tfun;
c1(10,101);
//逆变
Comparison2<string> c2 = tfun;
Comparison2<object> c3 = tfun;
c2 = c3;
//c3 = c2;//error
}