下面来看一个小例子:
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