C#学习笔记(委托)

委托的定义

  委托(delegate)是一种可以把引用存储为函数的类型。这听起来相当的棘手,但是机制是非常简单的。委托的声明非常类似于函数,但是不带函数体,且要使用delegate关键字。委托的声明指定了一个返回类型和一个参数列表。

  在定义了委托后,就可以声明该委托类型的变量。直接把这个变量初始化为与委托相同返回类型和参数列表的函数引用。之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样。

  有了引用函数的变量之后,还可以执行不能用其他方式完成的操作。例如,可以把委托变量作为参数传递给一个函数,这样,该函数就可以使用委托调用他引用的任何函数,而且在运行之前无需知道调用的是哪个函数。

下面给出一个示例:

class program

{

  delegate double processDelegate(double param1,double param2);

  static double Multiply(double param1,double param2)

  {

    return param1*param2;

  }

  static double Divide(double param1,double param2)

  {

    return param1/param2;

  }

  static void Main(string[] args)

  {

    processDelegate process;

    Console.WriteLine("Enter 2 number separated with a comma:");

    string input = Console.ReadLine();

    int commaPos = input.IndexOf(',');

    double param1 = Convert.ToDouble(input.Substring(0,commaPos));

    double param2 = Convert.ToDouble(input.SubString(commaPos + 1,input.length - commaPos -1));

    Console.WriteLine("Enter M to multiply or to divide:");

    input = Console.ReadLine();

    if(input == "M")

    {

      process = new processDelegate(Multiply);

    }

    else

    {

      process = new processDelegate(Divide);

    }

    Console.WriteLine("Result:{0}",process(param1,param2));

    Console.ReadKey();

  }

}

原文地址:https://www.cnblogs.com/DannyShi/p/4466886.html