您的位置:首页 - 教程 - .NET - 正文
关于接口的思考

1、接口的意义:

以前一直在思考的是接口的意义是什么,我们定义一个类,如果继承了接口,就需要实现接口的全部方法和属性,字段等,那么为什么要继承接口,直接定义我们想要的类就好了,后来随着接触的增多,再加上网上搜索的一些资料,渐渐体会到接口的诞生是一个很伟大的发明:

1)、接口可以定义规范,指的是我们在接口中定义一个方法,后面继承的类都需要实现该方法,且方法必须同名。这样子就形成了命名规范,增加代码的可读性。

2)、接口可以完善定义规则,是一个标准,这个怎么说呢,就是我们在做项目的时候如果一个类需要实现很多方法,就有可能会忘记,而定义接口并且继承他就可以避免这一个问题的发生。

3)、接口是多态的一种实现方式,在面向对象编程当中接口助于体现多态的特性,比如使用工厂模式就是使用了接口,还有在依赖注入和控制反转当中都是使用了接口来降低耦合性。

4)、。。。后面再补充,暂时就想到这么多。

 

2、来看一个接口的定义,以集合为例(因为这里面包含了我的一个思考):

我们再上一张图(List的定义继承图):

我们可以发现我们List很牛逼的继承了它的所有前辈,但是,其实他只要继承IList<T>和IList就可以实现相同的功能了,为什么微软在定义的时候还要把其他的前辈都继承了呢?

后来仔细领悟渐渐觉得这个可能是为了提高代码的可读性。

 

上面这一段代码是我敲的,我们可以看到,class Third是有实现了接口IFirst的方法的,但是我在写class Third的时候没有表明是有继承IFirst的,这样子如果别人要使用我的类的时候如果想要使用多态,就需要一级一级的往下看,才能够知道是可以使用IThird来接收id====ref="http:于体Tfab往rch"/python/">Alrch"/s.的Anl ,==rtp:用多态,就 ← 面级div/li> 多态,尰l> 体Tfab往rch"//> ="loghnqipl">发 /pyth lish"/ 论o>ut typ"loghIn>fype="seaden" namue="搜sjhev.ht>ap"logtxtCent"> aceholder="请输入关论aab往rp/> /pyth ut type="seaton" ariue="搜现明论4di /pyth di 论 /cref="#hebjaf/9asr3o7i9xqmrget="_bank" o 齠了才踺么微题的? /cref="#hebjaf/9asr3o7i9xqmrget="_bank" o 的纆潠样可 /cref="#hebjaf/9aspay2bsromrget="_bank" o 分割iv/li> /cref="#hebjaf/9asg7qrqcp5mrget="_bank" o 庎接廑动第维可够礟将第縪思自动...iv/li> /cref="#hebjrticlaf/9e/xumqfxvnmrget="_bank" o 踺吗 /cref="#hebjrticlaf/9e/xumqfxvnmrget="_bank" o 薇睥需踺IE11 /cref="#hebjaf/9f/wcyl5p4tm" twenqipl">rget="_bank" o 牛了iv/li> /cref="#hebjaf/9e/vm6plijjm" twenqipl">rget="_bank" o 腻害iv/li> /cref="#hebjaf/9asg7qrqcp5mrget="_bank" o 已经了删除按钮添代瑢除能了 /cref="#hebjaf/9asg7qrqcp5mrget="_bank" o 的给除按钮添代点击事件有表 > /Tfab /pyth di 同煳网嫠 > /cref="#hebjaf/9asrw9gkeafm吜瀧,或的引器丽够佀为 otyp或 ="# 参据传递耧,或的引器丽够佀为 otyp或 ="# 参据...iv/li> ref="#hebjaf/9asm9276ettm" trget="_bank" o >/" fram ref="#hebjaf/9e/flobmu4am" trget="_bank" o >Form ref="#hebjaf/9e/76qt1w23m" trget="_bank" o >Form ref="#hebjrticlaf/9e/e4pya1x0m" trget="_bank" o >T i> ref="#hebjaf/9g/l7uo8grymC#开现学习之ADOT i> ref="#hebjaf/9mksjhev.htm煳接口IFi===考)> i> ref="#hebjaf/9mkymxwyreomT i> ref="#hebjaf/9mkv36eyi9wm正,匹配闭为L编准等(支持嵌套 i> ref="#hebjaf/9mkg82dpqcom吜Tver/">据库ver/">据库 ref="#hebjaf/9as98as154rmbase64ILi)牄是当换iv/li> ref="#hebjaf/9as31k2192om吜Tr的与System.Rroiom的。成着机据NET ref="#hebjaf/9asj6rse3y9m ref="#hebjaf/9as8bq7v67pm ref="#hebjaf/9aso29vx2qtm ref="#hebjaf/9asicxd9xram" trget="_bank" o >重新认识瑢靀Ente"y Fram > /Tfab ript type="text/javascript" src="/themes/sy/bdzsy300x250a"> footgg/scpyth"loggg20bmiy /Tfa/Tfa b /Tfa er foot:用多态问起 hov©vertree.com href="#heclaget="_blank" on页 - aget="_blank" on导航> - - aget="_blank" on留 rref="#hecabotyfollowm 多态p/> 薇" i维维是:160px;lt=""><问起 ho维维是al 软信维维是:g src="/hvtmes/sy/hmg/btp:y/hwqwxm" alt=""><软信维维是al 多态p/> > udio b/Tfab /Tfh"logyesTopHnqipl"ltle="texdiscehy:none 返回顶方/Tfab b ript typ="/themes/sy/bs/jy/bootstrap.min">">