重温设计模式.委托和事件
最近搞个小软件,重构了几次,越来越精简,但还是不能够满足自己的要求。分析下来,主要是没有设计过程,头脑想到了就做。
以前看过一遍“大话设计模式”,看的时候前面的还能理解,后面的就不好理解,主要是没有经验,以前看的时候也没有动手写代码。为了对一些常用的设计模式有点了解,也更便于日常的编码工作,所以决定重温设计模式,并一个个敲代码,可能也只搞些基本的模式,看完后,扔开书本敲代码。
声明,本人不是专业程序员,业余写程序而已。所以表述不专业,代码有错误,请谅解。欢迎提意见和交流。
由于以前只了解委托,事件也是在WinForm里面编程用到,自己并没有单独写过,个人认为委托和事件是比较重要,也是面向对象基础概念中比较难理解的一个。
所以第一次先温习下这个,并彻底搞清楚。

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
分类:
C#.NET开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架