泛型委托:
泛型委托本质上和泛型方法非常相似,泛型委托关联的时候,可以是具体方法,匿名方法,lambda表达式;
泛型委托的形式:public delegate T1 MyGenericDelegate<T2>(T2 param1,T2 param2)
泛型委托作为方法参数,实际上传递的是一个具体方法或一个lambda表达式(多态的一种表现)
*****************************************************************************************************************************************************案例分析*************************************************************
static void Main(string[] args)
{
//使用泛型委托:具体方法
MyGenericDelegate<int> myDelegate1 = Add;
MyGenericDelegate<double> myDelegate2 = Sub;
Console.WriteLine(myDelegate1(1,2));
Console.WriteLine("******************************");
Console.WriteLine(myDelegate2(1,2.0));
Console.WriteLine("******************************");
//使用泛型委托:匿名方法
MyGenericDelegate<int> myDelegate3 = delegate (int a, int b) { return a + b; };
MyGenericDelegate<double> myDelegate4 = delegate (double a, double b) { return a - b; };
Console.WriteLine(myDelegate3(1, 2));
Console.WriteLine("******************************");
Console.WriteLine(myDelegate4(1, 2));
Console.WriteLine("******************************");
//使用泛型委托:Lambda表达式
MyGenericDelegate<int> myDelegate5 = (a, b) => a + b;
MyGenericDelegate<double> myDelegate6 = (a, b) => a - b;
Console.WriteLine(myDelegate5(1, 2));
Console.WriteLine("******************************");
Console.WriteLine(myDelegate6(1, 2.0));
Console.WriteLine("******************************");
//返回值和输入值不同
DelegateGeneric<double, int> delegategeneric = (a, b) => a + b;
Console.WriteLine(delegategeneric(10,20));
Console.Read();
}
//根据委托定义方法
static int Add(int a,int b)
{
return a + b;
}
static double Sub(double a,double b)
{
return a - b;
}
}
public delegate T MyGenericDelegate<T>(T param1,T param2);
public delegate T1 DelegateGeneric<T1,T2>(T2 param1,T2 param2);