委托(delegate)是一种存储函数引用的类型。在事件和事件处理时有重要的用途。
栗子:
定义一个委托:
//定义一个计算的委托,返回值和参数都是整数 private delegate int Calculation(int x, int y);
委托的定义类似于函数,但不带函数体,且必须要使用delegate关键字。委托的定义指定了一个返回类型和一个参数列表。
定义了委托后,就可以声明该委托的变量。
接着把这个变量初始化为与委托具有相同返回类型和参数列表的函数引用。
栗子:
定义两个方法,一个计算两个数相加,一个计算两个数相减:
using System; namespace MyConsoleApp { internal class Program { //定义一个计算的委托,返回值和参数都是整数 private delegate int Calculation(int x, int y); private static void Main() { Calculation calculation; const int x = 10, y = 5; if (DateTime.Now.Second % 2 == 0) { // 如果当前的秒数是偶数则执行两个数相加 calculation = Plus; } else { // 否则,执行两个数相减 calculation = Reduce; } Console.WriteLine(calculation(x, y)); } /// <summary> /// 计算两个数相加 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> private static int Plus(int x, int y) { return x + y; } private static int Reduce(int x, int y) { return x - y; } } }
将方法作为参数引用到另一个方法:
using System; namespace MyConsoleApp { internal class Program { //定义一个计算的委托,返回值和参数都是整数 private delegate int Calculation(int x, int y); private static void Main() { const int x = 10, y = 5; if (DateTime.Now.Second % 2 == 0) { // 如果当前的秒数是偶数则执行两个数相加 Console.WriteLine($"x + y = {Execute(Plus, x, y)}"); } else { // 否则,执行两个数相减 Console.WriteLine($"x - y = {Execute(Reduce, x, y)}"); } } /// <summary> /// 计算两个数相加 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> private static int Plus(int x, int y) { return x + y; } private static int Reduce(int x, int y) { return x - y; } private static int Execute(Calculation calculation, int x, int y) { return calculation(10, 5); } } }