(自我感觉C#中的委托函数就是C++中的函数指针的变化)
委托是一种可以把引用存储为函数的类型。
委托最终要的用途是与事件处理相关。
委托的声明非常类似于函数,但不带函数体,并且使用delegate关键字。委托的声明指定了一个返回类型和一个参数列表。在定义了委托后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用。之后就可以使用委托变量调用这个函数,就像该变量是一个函数一样。(就是C++中的函数指针嘛)
也可以把委托变量作为参数传递给一个函数,这样,该函数就可以使用委托调用它引用的任何函数,而且在运行之前无需知道调用的是哪个函数。示例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch06Ex05
{
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 ExecuteFunction(ProcessDelegate process)
{
process(2, 3);
}
static void Main(string[] args)
{
ProcessDelegate process;//委托变量
Console.WriteLine("Enter 2 numbers 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 D to divide:");
input = Console.ReadLine();
if (input == "M")
process = new ProcessDelegate(Multiply);//委托变量赋值
//process = Multiply;
else
process = new ProcessDelegate(Divide);//委托变量赋值
//process = Divide;
Console.WriteLine("Result: {0}", process(param1, param2));//委托被看做函数名
ExecuteFunction( process );//委托被用作函数的参数
Console.ReadKey();
}
}
}