一、委托
1、什么是委托?
委托其实就是一个类,是一个方法的容器,可以实现把一个方法作为参数传入另一个方法。
2、简单案例(Delegate委托)
using System;
namespace TestDelegation
{
class Program
{
// 定义委托类型及其参数
public delegate int ArithmeticOperation(int a, int b);
static void Main(string[] args)
{
// 创建一个委托对象,指向加法运算(委托第一种调用方式)
ArithmeticOperation add = new ArithmeticOperation(Addition);
Console.WriteLine("两数之和:{0}", addition(3, 2));
// 第二种调用方式
ArithmeticOperation subtract = subtraction;
Console.WriteLine("两数之差:{0}", subtract(7, 5));
// 第三种调用方式
int result = Calculate(4, 5, addition);
Console.WriteLine("结果是:{0}", result);
Console.ReadKey();
}
// 定义一个方法,接收两个参与运算的数,一个委托参数
public static int Calculate(int a, int b, ArithmeticOperation operation)
{
return operation(a, b);
}
// 加法
public static int Addition(int x, int y)
{
return x + y;
}
// 减法
public static int Subtraction(int x, int y)
{
return x - y;
}
}
}
运行结果:
说明:
定义一个委托类型,相当于所有运算方法的父类型
public delegate int ArithmeticOperation(int a, int b);
创建一个运算委托(容器),往运算委托(容器)加入加法运算方法
ArithmeticOperation add = new ArithmeticOperation(addition);
执行运算委托(容器)中的方法(这里执行的是加法运算方法)
Console.WriteLine("两数之和:{0}", addition(3, 2));
通俗的说:委托就像快递公司,我们要寄快递,但是我们寄快递的地址都是不同的,但是我们不用管这些,我们只要将快递要寄的地址告诉快递公司,由快递公司完成。
3、.Net内置的委托
Action: 可以传入参数,没有返回值的委托
简单案例
static void Main(string[] args)
{
Action<int, int> action = new Action<int, int>(ShowAdditionResult); // 实例化一个委托
action(4, 5);
Console.ReadLine();
}
public static void ShowAdditionResult(int number1, int number2)
{
Console.WriteLine(number1 + number2);
}
Func泛型委托 :
static void Main(string[] args)
{
Func<int, int, string> func = new Func<int, int, string>(Addition);
Console.WriteLine(func(4, 5));
Console.ReadLine();
}
public static string Addition(int a, int b)
{
return (a + b).ToString();
}
说明:Func泛型委托前面两个int代表是的参数的类型为int,最后的string,代表这个委托类型的返回值为string类型。
4、总结
Delegate可以无返回值,也可以指定返回值类型。
Func可以传入多个参数,必须具有返回值。
Action可以传入多个参数,无返回值。