我,只关心接口

我们去饭店吃饭,坐下。然后叫:服务员!
好,服务员来了。
你会说:倒茶。或说:点菜。是吧。
你不会说:来,我们讨论一下什么是面向对象吧。
这是为什么呢?很简单,对你(顾客)而言,你并不关心来的是男是女,不管他是不是上知天文下知地理,文能安邦物能定国,你只要知道,来的人一定具有点菜这个业务能力。
从代码来看,
1None.gifpublicinterfaceIOrder//点菜
2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
3InBlock.gifvoidEnregister();//记录点菜
4InBlock.gifstringIntroduce();//介绍菜肴特色
5ExpandedBlockEnd.gif}

6None.gif
7None.gifpublicinterfaceIMakeTea//泡茶
8ExpandedBlockStart.gifContractedBlock.gifdot.gif{
9InBlock.gifvoidMakeTea();
10ExpandedBlockEnd.gif}

11None.gif
12None.gifpublicinterfaceICheckout//买单
13ExpandedBlockStart.gifContractedBlock.gifdot.gif{
14InBlock.gif
15ExpandedBlockEnd.gif}

16None.gifpublicclassWaiter:IOrder,IMakeTea,ICheckout
17ExpandedBlockStart.gifContractedBlock.gifdot.gif{
18InBlock.gif
19ExpandedBlockEnd.gif}


你只关心他是不是实现了IOrder接口,其他的统统不关心。

再说一个,公司HR发布招聘信息,要求会C#和SQL Server,ok这也是接口要求,就是说面试的人要实现ICSharp和ISQLServer接口,其他你实现了高级运动员,38红旗手,3讲活用标兵,我统统地不关心。只要你实现了ICSharp和ISQLServer接口就有资格来面试,否则统统乱棒打出。

现在感觉是不错,但是我们再来想想我们的Person,他实现了IDoctor, IGaduate, IProfessor, IConsumer,啊,真的是多才多艺阿(如果Consumer也算才艺),
不过我们马上会发现出现以下的场景

1None.gifpublicclassOperatingRoom//手术室
2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
3InBlock.gifpublicOperatingRoom(Personperson)
4ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
5InBlock.gif
6ExpandedSubBlockEnd.gif}

7ExpandedBlockEnd.gif}

8None.gif
9None.gif
10None.gifpublicclassClassRoom//教室
11ExpandedBlockStart.gifContractedBlock.gifdot.gif{
12InBlock.gifpublicClassRoom(Personperson)
13ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
14InBlock.gif
15ExpandedSubBlockEnd.gif}

16ExpandedBlockEnd.gif}

17None.gif
18None.gifpublicclassOffice//办公室
19ExpandedBlockStart.gifContractedBlock.gifdot.gif{
20InBlock.gifpublicOffice(Personperson)
21ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
22ExpandedSubBlockEnd.gif}

23ExpandedBlockEnd.gif}

24None.gif
25None.gifpublicclassMall//购物商场
26ExpandedBlockStart.gifContractedBlock.gifdot.gif{
27InBlock.gifpublicMall(Personperson)
28ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
29ExpandedSubBlockEnd.gif}

30ExpandedBlockEnd.gif}

你认为会出现什么场景?我们这位多才多艺的大师,会在商场对收银小姐拿出刀子(void OPS()),在手术室作练习(int Exam()),也就是说Person可以完全的没有控制的使用任何实现的接口方法,所以我们的代码要改为
1None.gifpublicclassOperatingRoom//手术室
2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
3InBlock.gifpublicOperatingRoom(IDoctordoctor)
4ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
5InBlock.gif
6ExpandedSubBlockEnd.gif}

7ExpandedBlockEnd.gif}

8None.gif
9None.gifpublicclassClassRoom//教室
10ExpandedBlockStart.gifContractedBlock.gifdot.gif{
11InBlock.gifpublicClassRoom(IGaduategaduate)
12ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
13InBlock.gif
14ExpandedSubBlockEnd.gif}

15ExpandedBlockEnd.gif}

16None.gif
17None.gifpublicclassOffice//办公室
18ExpandedBlockStart.gifContractedBlock.gifdot.gif{
19InBlock.gifpublicOffice(IProfessorprofessor)
20ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
21ExpandedSubBlockEnd.gif}

22ExpandedBlockEnd.gif}

23None.gif
24None.gifpublicclassMall//购物商场
25ExpandedBlockStart.gifContractedBlock.gifdot.gif{
26InBlock.gifpublicMall(IConsumerconsumer)
27ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
28ExpandedSubBlockEnd.gif}

29ExpandedBlockEnd.gif}

如此一来,世界就安全的多了。
我们上篇还讲到了显式实现,显式实现使C#很有意思的特色。
想想,如果我们对Person的所有接口全部都是显式实现,那会怎么样呢?
从表面看,他就是一个普普通通的Person,而只有进入了相应的OperatingRoom、ClassRoom、Office、Mall以后,他的相应接口才被体现出来。
就象超人一样,平时是一个凡人,一旦穿上了S衣服和把内裤穿到外面来,就拥有了ISupperMan的方法,而你呢?你把内裤穿外面来,也不会飞起来,因为你既没有标准实现也没有显式实现ISupperMan。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值