标题:C#中为什么要用接口?
只看楼主
卡巴斯
Rank: 2
等 级:论坛游民
帖 子:50
专家分:31
注 册:2012-12-18
结帖率:100%
已结贴  问题点数:5 回复次数:2 
C#中为什么要用接口?
现在学习C#,搞不明白为什么要用接口?如果类中要实行某些方法,直接写不就可以了,为什么要定义一个接口继承以后才去实现方法?感觉接口没有什么用处,请教别人说接口相当于一个协议,规范类与类之间的功能,那为什么不直接让类继承类而要用接口呢?接口到底要在什么地方使用?
搜索更多相关主题的帖子: 继承 接口 
2013-03-24 22:11
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:5 
首先C#中,类只能继承一个类,但可以实现多个接口.
类和接口是两个概念,刚开始理解不了也不要紧,你理解了什么就用什么,不理解的东西随着你知识的积累,慢慢就会理解了.
关于类和接口概念解释什么的,书上网上都有,再说一遍你也无法理解,给你举个例子,慢慢去消化吧.

1. 我们定义一个"门"的基类,这个类就是描述门的基本特征,如它是一个长方体,它至少需要有一把锁,它的高度至少在2米以上等.
2. 我们现在要定义一个子类,用这个子类来描述一个"防盗门".因为"防盗门",也是"门",所以理所当然要继承"门"这个基类.
   那我们现在这个门既然是防盗门,那除了满足门的特征以外,当然还有些区别,比如需要用特殊的钢材,需要两把锁,这些就是子类对于基类有所扩展.
重点来了:但最关键的是,它需要有防盗功能,那么这个防盗功能,我们要加在什么地方呢?
3. 假如我们把防盗功能放到"门"这个基类,但显然有点奇怪,因为门跟防盗功能是两个概念,加在门里面显然不合适,如果我还有一个子类,这个子类用于描述旋转式的玻璃门,这个玻璃门并不需要防盗功能,把防盗功能加到基类里面就明显不对.
4. 假如我们把防盗功能放到"防盗门"子类里面,这样做可以,没有什么不对,但防盗功能是一个规范,就像ISO9001,ISO9002这种质量管理体系一样,是一个约束,因为具备防盗功能的东西并不只是门,我还可以用于电子防盗锁,保险柜等等一切需要防盗的东西上.所以把防盗功能独立出来是最好的选择.
5. 那我们把防盗功能独立出来写一个防盗功能类,这样做可以,但也并非最好的选择,因为防盗的方式多种多样,无论我在防盗类里面写多少种防盗的方法,也许都不够用,还麻烦.而且这样做还有一个问题,就是我一开始说的,C#中只能承继一个类,我继承了门的类,就没有办法再继承防盗类了.
6. 最好的方式,就是把防盗功能写成一个接口,在这个接口里面定义了一个防盗方法,当然这个方法里面并没有实际内容,我只是想让所有需要有防盗功能的类,都要实现一个防盗的方法,具体的防盗方式,各子类根据自己的实际情况去实现具体的内容.

那现在我的"防盗门"子类,继承"门"这个基类,实现"防盗功能"这个接口,就可以完全满足"防盗门"这个要求了.并且"门"这个基类,也可以被其它种类的门所继承,而"防盗功能"这个接口,也可以被其它任何需要防盗功能的类去实现这个功能.
2013-03-24 23:44
qq645485165
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:76
专家分:197
注 册:2013-3-16
得分:0 
长见识了!不错,就是做程序时得理解程序都要干什么!
2013-03-25 09:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-401806-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075288 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved