重温设计模式.委托和事件
最近搞个小软件,重构了几次,越来越精简,但还是不能够满足自己的要求。分析下来,主要是没有设计过程,头脑想到了就做。
以前看过一遍“大话设计模式”,看的时候前面的还能理解,后面的就不好理解,主要是没有经验,以前看的时候也没有动手写代码。为了对一些常用的设计模式有点了解,也更便于日常的编码工作,所以决定重温设计模式,并一个个敲代码,可能也只搞些基本的模式,看完后,扔开书本敲代码。
声明,本人不是专业程序员,业余写程序而已。所以表述不专业,代码有错误,请谅解。欢迎提意见和交流。
由于以前只了解委托,事件也是在WinForm里面编程用到,自己并没有单独写过,个人认为委托和事件是比较重要,也是面向对象基础概念中比较难理解的一个。
所以第一次先温习下这个,并彻底搞清楚。
View Code
备注,上述例子来源于“大话设计模式”最后的面向对象基础。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace DesignPattern
7 {
8 /// <summary>
9 /// 委托与事件学习-参考大话设计模式中的猫和老鼠的例子:
10 /// 1个猫 Tom,2只老鼠 Jerry和Jack,只要Tom喊一声,老鼠就会喊 快跑,猫来了
11 /// </summary>
12 public class DelegateExample
13 {
14 static void Main(string[] args)
15 {
16 Cat cat = new Cat("Tom");
17
18 Mouse mouseJerry = new Mouse("Jerry");
19 Mouse mouseJack = new Mouse("Jack");
20
21 cat.CatShout += new Cat.CatEventHander(mouseJack.Run);
22 cat.CatShout += new Cat.CatEventHander(mouseJerry.Run);
23 cat.Shout();
24 Console.Read();
25 }
26 }
27
28 public class Cat
29 {
30 /// <summary>
31 /// 猫的名称
32 /// </summary>
33 public string Name { get; set; }
34
35 public Cat(string name)
36 {
37 this.Name = name;
38 }
39 /// <summary>
40 /// 猫说话
41 /// </summary>
42 public void Shout()
43 {
44 Console.WriteLine("Hi ,我是{0}",Name );
45 //如果事件中有对象,则执行
46 if (CatShout != null) CatShout();
47 }
48 /// <summary>
49 /// 声明一个"猫叫"的委托
50 /// </summary>
51 public delegate void CatEventHander();
52 /// <summary>
53 /// 声明一个猫叫的事件
54 /// </summary>
55 public event CatEventHander CatShout;
56 }
57 public class Mouse
58 {
59 /// <summary>
60 /// 老鼠的名称
61 /// </summary>
62 public string Name { get; set; }
63
64 public Mouse(string name)
65 {
66 this.Name = name;
67 }
68 /// <summary>
69 /// 老鼠跑的方法(猫来的时候,老鼠就跑)
70 /// </summary>
71 public void Run()
72 {
73 Console.WriteLine("Hi,我是{0},快跑,猫来了....",Name );
74 }
75 }
76 }
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace DesignPattern
7 {
8 /// <summary>
9 /// 委托与事件学习-参考大话设计模式中的猫和老鼠的例子:
10 /// 1个猫 Tom,2只老鼠 Jerry和Jack,只要Tom喊一声,老鼠就会喊 快跑,猫来了
11 /// </summary>
12 public class DelegateExample
13 {
14 static void Main(string[] args)
15 {
16 Cat cat = new Cat("Tom");
17
18 Mouse mouseJerry = new Mouse("Jerry");
19 Mouse mouseJack = new Mouse("Jack");
20
21 cat.CatShout += new Cat.CatEventHander(mouseJack.Run);
22 cat.CatShout += new Cat.CatEventHander(mouseJerry.Run);
23 cat.Shout();
24 Console.Read();
25 }
26 }
27
28 public class Cat
29 {
30 /// <summary>
31 /// 猫的名称
32 /// </summary>
33 public string Name { get; set; }
34
35 public Cat(string name)
36 {
37 this.Name = name;
38 }
39 /// <summary>
40 /// 猫说话
41 /// </summary>
42 public void Shout()
43 {
44 Console.WriteLine("Hi ,我是{0}",Name );
45 //如果事件中有对象,则执行
46 if (CatShout != null) CatShout();
47 }
48 /// <summary>
49 /// 声明一个"猫叫"的委托
50 /// </summary>
51 public delegate void CatEventHander();
52 /// <summary>
53 /// 声明一个猫叫的事件
54 /// </summary>
55 public event CatEventHander CatShout;
56 }
57 public class Mouse
58 {
59 /// <summary>
60 /// 老鼠的名称
61 /// </summary>
62 public string Name { get; set; }
63
64 public Mouse(string name)
65 {
66 this.Name = name;
67 }
68 /// <summary>
69 /// 老鼠跑的方法(猫来的时候,老鼠就跑)
70 /// </summary>
71 public void Run()
72 {
73 Console.WriteLine("Hi,我是{0},快跑,猫来了....",Name );
74 }
75 }
76 }
本博客还有大量的.NET开源技术文章,您可能感兴趣:
.NET数据挖掘与机器学习,作者博客: http://www.cnblogs.com/asxinyu
E-mail:1287263703@qq.com