什么是委托?
委托(delegate)是一种可以把引用存储为函数的类型。委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。委托的声明指定了一个类型和参数列表。
在定义了一个委托后就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用。之后,就可以用委托变量调用这个函数,就像该变量是一个函数一样。
//注释:为了说明问题,这里没有验证用户输入的有效性。
class Program
{
//声明委托变量ProcessDelegate
delegate double ProcessDelegate(double param1, double param2);
//函数Multiply
static double Multiply(double param1, double param2)
{
return param1 * param2;
}
//函数Multiply
static double Divide(double param1, double param2)
{
return param1 / param2;
}
static void Main(string[] args)
{
//声明一个委托类型ProcessDelegate的变量 process
ProcessDelegate process;
Console.WriteLine("Enter 2 numbers Separated with a comma :");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
//从用户输入的字符串中提取数字param1并转换成double型
double param1 = Convert.ToDouble(input.Substring(0, commaPos ));
double param2;
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初始化为Multiply函数的引用 也可以 process=Multiply
process = new ProcessDelegate(Multiply);
else
//把变量process 初始化为Divide函数的引用 也可以 process =Divide
process = new ProcessDelegate(Divide);
//通过引用process 调用相应的函数并输出结果,process引用还可以当做参数传给别的函数
Console.WriteLine("Result: {0}", process(param1,param2));
Console.ReadKey();
}
}