本篇文章主要采用理论和代码实例相结合方式来论述委托和事件,涉及到一些边界技术,如软件架构的OCP原则(开-闭原则),
软件架构解耦,设计模式(Sender-Order)和事件驱动模型,有一定难度和深度,不适合初级者。
第一部份 委托
关于委托内容,主要围绕下图来论述。
一 委托是什么(what)
(一)委托产生的背景之一
1.我们先来假设这样一个情景需求:
设计一个系统,使其满足如下条件:
(1)当前,只有中国人和英国人使用该系统;
(2)向系统输入用户名和相应的语言,将产生相应语言的问候语;
(3)后期,可能会有其他国家语言加入该系统(系统变化的部分) ;
2.技术方案实现
关于技术方案实现,我们可以采用下图中的三种方式之一。
为了更好地叙述委托,我们分别实现三种技术方案,并找出它们的关系。
2.1 一般实现
Code(控制台程序)
1 using System;
2
3 namespace DelegateDemo
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 Console.WriteLine(GetGreetingContens("小王", "Chinese"));
10 Console.WriteLine(GetGreetingContens("Alan_beijing", "English"));
11 Console.WriteLine(GetGreetingContens("Linda", "Russian"));
12 Console.Read();
13 }
14
15 //根据用户名和语言,获取问候语
16 public static string GetGreetingContens(string UserName, string Language)
17 {
18 //New 一个GreetToUsers对象
19 GreetToUsers greetToUsers = new GreetToUsers();
20 //当然,你也可以使用switch开发语句来代替如下的if......else......
21 if (Language == "Chinese")
22 {
23 return greetToUsers.ChinesePeople(UserName);
24 }
25 else if (Language == "English")
26 {
27 return greetToUsers.EnglishPeople(UserName);
28 }
29 else
30 {
31 return "抱歉,当前系统只支持汉语与英语(Sorry, the current system only supports Chinese and English.)";
32 }
33 }
34 }
35
36
37
38 //定义基本问候类和方法
39 public class GreetToUsers
40 {
41 //Chinese People
42 public string ChinesePeople(string UserName)
43 {
44 string GreetContents = "您好!" + UserName;
45 return GreetContents;
46 }
47
48 //English People
49 public string EnglishPeople(string UserName)
50 {
51 string GreetContents = "Hello," + UserName + "!";
52 return GreetContents;
53 }
54 }
55
56 }