delegate(委托)-基础

参考:
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
}
发布了24 篇原创文章 · 获赞 0 · 访问量 642

猜你喜欢

转载自blog.csdn.net/u014589770/article/details/105414951