我们去饭店吃饭,坐下。然后叫:服务员!
好,服务员来了。
你会说:倒茶。或说:点菜。是吧。
你不会说:来,我们讨论一下什么是面向对象吧。
这是为什么呢?很简单,对你(顾客)而言,你并不关心来的是男是女,不管他是不是上知天文下知地理,文能安邦物能定国,你只要知道,来的人一定具有点菜这个业务能力。
从代码来看,
你认为会出现什么场景?我们这位多才多艺的大师,会在商场对收银小姐拿出刀子(void OPS()),在手术室作练习(int Exam()),也就是说Person可以完全的没有控制的使用任何实现的接口方法,所以我们的代码要改为
如此一来,世界就安全的多了。
我们上篇还讲到了显式实现,显式实现使C#很有意思的特色。
想想,如果我们对Person的所有接口全部都是显式实现,那会怎么样呢?
从表面看,他就是一个普普通通的Person,而只有进入了相应的OperatingRoom、ClassRoom、Office、Mall以后,他的相应接口才被体现出来。
就象超人一样,平时是一个凡人,一旦穿上了S衣服和把内裤穿到外面来,就拥有了ISupperMan的方法,而你呢?你把内裤穿外面来,也不会飞起来,因为你既没有标准实现也没有显式实现ISupperMan。
好,服务员来了。
你会说:倒茶。或说:点菜。是吧。
你不会说:来,我们讨论一下什么是面向对象吧。
这是为什么呢?很简单,对你(顾客)而言,你并不关心来的是男是女,不管他是不是上知天文下知地理,文能安邦物能定国,你只要知道,来的人一定具有点菜这个业务能力。
从代码来看,
1
publicinterfaceIOrder//点菜
2

{
3
voidEnregister();//记录点菜
4
stringIntroduce();//介绍菜肴特色
5
}
6
7
publicinterfaceIMakeTea//泡茶
8

{
9
voidMakeTea();
10
}
11
12
publicinterfaceICheckout//买单
13

{
14
15
}
16
publicclassWaiter:IOrder,IMakeTea,ICheckout
17

{
18
19
}
publicinterfaceIOrder//点菜2


{3
voidEnregister();//记录点菜4
stringIntroduce();//介绍菜肴特色5
}6

7
publicinterfaceIMakeTea//泡茶8


{9
voidMakeTea();10
}11

12
publicinterfaceICheckout//买单13


{14

15
}16
publicclassWaiter:IOrder,IMakeTea,ICheckout17


{18

19
}
你只关心他是不是实现了IOrder接口,其他的统统不关心。
再说一个,公司HR发布招聘信息,要求会C#和SQL Server,ok这也是接口要求,就是说面试的人要实现ICSharp和ISQLServer接口,其他你实现了高级运动员,38红旗手,3讲活用标兵,我统统地不关心。只要你实现了ICSharp和ISQLServer接口就有资格来面试,否则统统乱棒打出。
现在感觉是不错,但是我们再来想想我们的Person,他实现了IDoctor, IGaduate, IProfessor, IConsumer,啊,真的是多才多艺阿(如果Consumer也算才艺),
不过我们马上会发现出现以下的场景
1
publicclassOperatingRoom//手术室
2

{
3
publicOperatingRoom(Personperson)
4

{
5
6
}
7
}
8
9
10
publicclassClassRoom//教室
11

{
12
publicClassRoom(Personperson)
13

{
14
15
}
16
}
17
18
publicclassOffice//办公室
19

{
20
publicOffice(Personperson)
21

{
22
}
23
}
24
25
publicclassMall//购物商场
26

{
27
publicMall(Personperson)
28

{
29
}
30
}
publicclassOperatingRoom//手术室2


{3
publicOperatingRoom(Personperson)4


{5

6
}7
}8

9

10
publicclassClassRoom//教室11


{12
publicClassRoom(Personperson)13


{14

15
}16
}17

18
publicclassOffice//办公室19


{20
publicOffice(Personperson)21


{22
}23
}24

25
publicclassMall//购物商场26


{27
publicMall(Personperson)28


{29
}30
}
你认为会出现什么场景?我们这位多才多艺的大师,会在商场对收银小姐拿出刀子(void OPS()),在手术室作练习(int Exam()),也就是说Person可以完全的没有控制的使用任何实现的接口方法,所以我们的代码要改为
1
publicclassOperatingRoom//手术室
2

{
3
publicOperatingRoom(IDoctordoctor)
4

{
5
6
}
7
}
8
9
publicclassClassRoom//教室
10

{
11
publicClassRoom(IGaduategaduate)
12

{
13
14
}
15
}
16
17
publicclassOffice//办公室
18

{
19
publicOffice(IProfessorprofessor)
20

{
21
}
22
}
23
24
publicclassMall//购物商场
25

{
26
publicMall(IConsumerconsumer)
27

{
28
}
29
}
publicclassOperatingRoom//手术室2


{3
publicOperatingRoom(IDoctordoctor)4


{5

6
}7
}8

9
publicclassClassRoom//教室10


{11
publicClassRoom(IGaduategaduate)12


{13

14
}15
}16

17
publicclassOffice//办公室18


{19
publicOffice(IProfessorprofessor)20


{21
}22
}23

24
publicclassMall//购物商场25


{26
publicMall(IConsumerconsumer)27


{28
}29
}
如此一来,世界就安全的多了。
我们上篇还讲到了显式实现,显式实现使C#很有意思的特色。
想想,如果我们对Person的所有接口全部都是显式实现,那会怎么样呢?
从表面看,他就是一个普普通通的Person,而只有进入了相应的OperatingRoom、ClassRoom、Office、Mall以后,他的相应接口才被体现出来。
就象超人一样,平时是一个凡人,一旦穿上了S衣服和把内裤穿到外面来,就拥有了ISupperMan的方法,而你呢?你把内裤穿外面来,也不会飞起来,因为你既没有标准实现也没有显式实现ISupperMan。

被折叠的 条评论
为什么被折叠?



