第一种:基础委托
- 关键字delegate定义一个委托
- 声明一个方法来对应委托
- 实例化这个委托
class Program
{
//1:关键字delegate定义一个委托
public delegate int DelegateAdd(int a, int b);
static void Main(string[] args)
{
//3:实例化这个委托
DelegateAdd Add = new DelegateAdd(AddMeth);
int res = Add.Invoke(11, 33);
Console.WriteLine(res);
Console.ReadLine();
}
//2:声明一个方法来对应委托
public static int AddMeth(int a, int b)
{
return a + b;
}
}
输出:
第二种:匿名方法
写在前:上面基础委托由三步完成,微软为了简化步骤就引入了匿名方法,也称语法糖。
- 关键字delegate定义一个委托
- 把一个方法赋值给委托,也就是匿名方法
class Program
{
//1:关键字delegate定义一个委托
public delegate int DelegateAdd(int a, int b);
static void Main(string[] args)
{
//2:把一个匿名方法赋值给委托
DelegateAdd Add = delegate (int a, int b) { return a + b; };
int res = Add.Invoke(55, 72);
Console.WriteLine(res);
Console.ReadLine();
}
}
输出:
第三种:Lambda表达式
写在前:微软为了代码更简洁,就提出了Lambda表达式来简化匿名方法。
- 关键字delegate定义一个委托
- Lambda表达式简化匿名方法
class Program
{
//1:关键字delegate定义一个委托
public delegate int DelegateAdd(int a, int b);
static void Main(string[] args)
{
//2:Lambda表达式简化匿名方法
DelegateAdd Add = (int a, int b) => { return a + b; };
int res = Add.Invoke(99, 2);
Console.WriteLine(res);
Console.ReadLine();
}
}
输出:
第四种:泛型委托
写在前:
微软为了委托更加简化,把上面的至少两步直接合成一步来完成,就有了泛型委托;
无返回值使用关键字Action,参数类型都是入参类型;
有返回值使用关键字Func,其中最后一个参数类型就是返回值类型,前面都是入参类型。
- 无返回值
class Program
{
static void Main(string[] args)
{
//无返回值
Action<int, int> Add = (int a, int b) => { Console.WriteLine(a + b); };
Add(12, 45);
Console.ReadLine();
}
}
输出:
- 有返回值
class Program
{
static void Main(string[] args)
{
//有返回值
Func<int, int,int> Add = (int a, int b) => { return a + b; };
int res = Add(8, 44);
Console.WriteLine(res);
Console.ReadLine();
}
}
输出: