实例解析接口概念

我发现,不少朋友对于接口这个东西,理论还是比较清楚,但是说不出所以然,对于其应用更加模糊.
借助上面写的一个小程序,讲一下接口问题。
大家可以去下载<<C#象棋游戏>>,互相学习,呵呵。
首先,我们进入今天的主题,接口(interface)用来定义一种程序的协定,这样的概念相信大家都知道,在C#中接口允许多继承,允许包含事件,方法,属性等。
其次,我们再来看,接口,顾名思义,从名字上我们也能看出为一种连接的出入口,那么在我们程序中也是一种出入通道(特别是组件编程)的感觉。

我们来看这个程序,我们先假设这个程序由2个程序员来做,A做棋盘,B做棋子,我们其实也可以不使用接口来做,那么我们A在棋子点击事件中需要写成

None.gif private   void  cib_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif
if(sender is ChessItemBing)dot.gif{dot.gif}
ExpandedSubBlockStart.gifContractedSubBlock.gif
else if(sender is ChessItemJu)dot.gif{dot.gif}
ExpandedSubBlockStart.gifContractedSubBlock.gif
else if(sender is ChessItemMa)dot.gif{dot.gif}
ExpandedSubBlockStart.gifContractedSubBlock.gif
else if(sender is ChessItemPao)dot.gif{dot.gif}
InBlock.gifdot.gif
ExpandedBlockEnd.gif}

当然,在这个程序中类不多,只有7个,大家可以一一判断,此时A必须知道B如何创建类,创建了那些类,但是如果有很多这样的类呢,由或者几个月以后程序有改变呢?会发现,A必须随着B变化而变化,可扩充性非常的差。

那么我们再来看,其中有一个接口,定义了整个棋子的各类属性以及方法。A程序员并不需要知道B程序员创建了那些类,B程序员也不需要知道A程序的代码,AB只需要知道他们的出入口为IChessItem,A所要做的工作只是转换获取该接口

None.gif private   void  cib_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif
InBlock.gif            IChessItem ic 
= (IChessItem)sender;
InBlock.gifdot.gif
ExpandedBlockEnd.gif}

那么B呢,大家可以看到,几个月以后,如果程序有改变,B要做的仅仅是添加类继承此接口,只要接口没改变,那么A的程序可以不做任何的修改。

我们再回过头来看此程序,象棋的棋子有7种,都继承类ChessItemBase,而ChessItemBase他则继承接口,实现这些方法。IChessItem作为模板,也可以说它作为和我们棋盘的通道出入口,棋盘并不知道棋子实际是那一个类,他们所有的超做都来自此接口。

那么可能有朋友会问,我转换为父类也同样能达到效果嘛

None.gif private   void  cib_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifChessItemBase cib 
= (ChessItemBase )sender;
ExpandedBlockEnd.gif}

说的不错,在我们这个程序中确实如此,但如果我们程序扩充,添加另一父类ChessItemBase2,ChessItemBase3呢,你会发现,A还是要重写判断为ChessItemBase,ChessItemBase2,ChessItemBase3,的代码,所以这都不利于我们程序的扩充。

接口比较抽象,看到许多书上,以及网上很多文章对接口写的很书面化,很多人看的云里雾里,所以上了这边文章.
以上是我对接口的一个个人理解,可能语言不太专业,可能大家对此持有其他不同的意见,欢迎发表.

转载于:https://www.cnblogs.com/KeithDan/archive/2006/12/06/584390.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值