C#学习笔记,26——委托计算器

说明(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 }