说明(2017-11-20 15:14:18):
1. 委托一直稀里糊涂的,有人说简单,有人说难,艹你们!
2. 其实主要是因为,平时不用委托也能解决大部分问题,所以都没有特意去用,网上也没有什么很好的应用例子,基本都是为了解释委托,生造出来的例子,没什么应用价值。
3. 这个计算器委托示例,是CZ的蒋坤老师讲的,还是比较容易学习的,他把委托的使用定为五步:1.准备方法。2.准备委托类型。3.定义委托变量。4.授权方法。5.调用方法。
4. 简单的委托,只需要返回一个参数就可以了。计算器因为是有4个加减乘除的方法,开始我还想着怎么把4个方法绑定到一个委托上。后来看了视频才知道,需要新建一个返回值是委托的Factory方法,用来返回这四个方法的返回值。
5. 这个计算器不用委托也能做,目前我知道的要用委托的地方只有杨洪波在三层里讲的,winform里的窗体传值。
6. 后面还有一个事件,说是比委托安全,因为委托人人都能调用(这么随便?),等看到再说吧!
7. 为啥现在突然回过头来看委托?是因为asp.net看到最后,不懂委托实在是看不下去了。。
代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace _03_计算器 7 { 8 class Program 9 { 10 //2.准备委托类型。声明委托,返回值、参数与运算符方法相同。 11 public delegate double MyDel(double num1, double num2); 12 13 static void Main(string[] args) 14 { 15 16 Console.WriteLine("输入数字1:"); 17 double num1 = double.Parse(Console.ReadLine()); 18 Console.WriteLine("输入运算符(+_*/):"); 19 string opera = Console.ReadLine(); 20 Console.WriteLine("输入数字2:"); 21 double num2 = double.Parse(Console.ReadLine()); 22 //3.定义委托变量。注意不能加括号!!! 23 MyDel myDel; 24 //4.授权方法。 25 myDel= Factory(opera); 26 if (myDel != null) 27 { 28 //5.调用方法。 29 //等同于Factory()。 30 double result = myDel(num1, num2); 31 Console.WriteLine("计算结果:{0}{1}{2}={3}", num1, opera, num2, result); 32 } 33 else 34 { 35 Console.WriteLine("运算符有误"); 36 } 37 38 39 Console.ReadKey(); 40 41 42 } 43 //定义委托方法(定义一个返回委托类型的方法) 44 public static MyDel Factory(string opera) 45 { 46 switch (opera) 47 { 48 case "+": 49 return Add; 50 case "-": 51 return Minus; 52 case "*": 53 return Multiply; 54 case "/": 55 return Divide; 56 default: 57 return null; 58 } 59 } 60 //1.准备运算符方法。 61 private static double Add(double num1, double num2) 62 { 63 return num1 + num2; 64 } 65 private static double Minus(double num1, double num2) 66 { 67 return num1 - num2; 68 } 69 private static double Multiply(double num1, double num2) 70 { 71 return num1 * num2; 72 } 73 private static double Divide(double num1, double num2) 74 { 75 return num1 / num2; 76 } 77 78 } 79 }