下面来看一个小例子:
namespace 委托
{
class Program
{
//定义一个委托ProcessDelegate,其返回类型和参数与函数Multiply()和Divide()相匹配
delegate string ProcessDelegate(double param1, double param2);
//定义乘法和出除法的函数
static string Multiply(double param1, double param2)
{
return Convert.ToString(param1 * param2);
}
static string Divide(double param1, double param2)
{
if (param2!=0)
{
return Convert.ToString(param1 / param2);
}
else
{
return "除数不能为0!";
}
}
static void Main(string[] args)
{
ProcessDelegate process; //使用新的委托类型声明一个变量
//请求用户由逗号分隔两个数字,并把这些数字仿真两个double变量中
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 mitiply or D to divide:");
input = Console.ReadLine();
//根据用户的选择,初始化process委托变量
if (input=="M")
{
process = new ProcessDelegate(Multiply);
}
else
{
process = new ProcessDelegate(Divide);
}
//把委托变量看作一个函数名
Console.WriteLine("Result:{0}", process(param1, param2));
Console.Read();
}
}
}为了说明问题,这里没有验证用户输入的有效性。如果这些是“现实中的”代码,就应花更多时间来确保在局部变量param1和param2中得到有效的值。
原文地址:http://blog.csdn.net/ry513705618/article/details/25415323