黑马程序员技术交流社区

标题: 关于显式实现接口 [打印本页]

作者: _xixi_    时间: 2014-7-8 00:26
标题: 关于显式实现接口
本帖最后由 _xixi_ 于 2014-7-8 13:02 编辑

显式实现接口,通过接口变量调用,隐式实现接口,通过对象变量调用

  1. interface IFlyable
  2.     {
  3.         void Fly();
  4.     }
  5.     class FeiQin : IFlyable
  6.     {
  7.         public void Fly()
  8.         {
  9.             Console.WriteLine("飞禽都会飞!");
  10.         }

  11.         void IFlyable.Fly()
  12.         {
  13.             Console.WriteLine("。。。。会飞!");
  14.         }
  15.     }
  16.     class Program
  17.     {
  18.         static void Main(string[] args)
  19.         {
  20.             FeiQin feiQin = new FeiQin();
  21.             feiQin.Fly(); //显示"飞禽都会飞!",调用隐式实现接口
  22.             IFlyable fly = feiQin;
  23.             fly.Fly();//显示"。。。。会飞!",调用显式实现接口,只能通过接口变量调用
  24.             Console.ReadKey();
  25.         }
  26.     }
复制代码


看到这里,写了以上代码区别了一下,可是为什么要在一个类里面实现两个同名的方法,这样做有什么实用的意义吗?请大家不吝赐教!
作者: FrancisTan    时间: 2014-7-8 08:59
这个问题我也不懂,抢个座,坐等大牛解答……
作者: weiwei10153    时间: 2014-7-8 09:23
显示实现接口,可以解决方法重名的问题,FeiQin 类实现了IFlyable接口,那么就必须重写IFlyable接口中的Fly方法,但是FeiQin 类本身有一个Fly方法,而实现接口的类必须重写接口中所有的方法,为了区分这两个方法,通过显示实现接口的方式,把实现IFlyable接口的方法设置为私有方法.在外部调用方法的时候,普通类只能调用到FeiQin 类的public void Fly()方法,而通过接口调用,就可以调用到private void IFlyable.Fly()的方法
作者: 向晓伟    时间: 2014-7-8 09:25
隐式实现可以通过接口和类调用
显示实现只能通过接口来调用
显示实现可以隐藏实现代码,而且在一些使用接口的系统中,调用者只能通过接口调用而不是底层的类来访问。
作者: dugubaitian    时间: 2014-7-8 10:10
2楼说的太对了。。
作者: 昕☆Rainbow    时间: 2014-7-8 11:32
也一直不明白。。学习了   
作者: _xixi_    时间: 2014-7-8 12:56
向晓伟 发表于 2014-7-8 09:25
隐式实现可以通过接口和类调用
显示实现只能通过接口来调用
显示实现可以隐藏实现代码,而且在一些使用接口 ...

谢谢你的回答,你的回答解决了我的疑问
作者: _xixi_    时间: 2014-7-8 12:57
weiwei10153 发表于 2014-7-8 09:23
显示实现接口,可以解决方法重名的问题,FeiQin 类实现了IFlyable接口,那么就必须重写IFlyable接口中的Fly方 ...

谢谢你的耐心回答
作者: c19t043    时间: 2014-7-15 22:42


作者: _xixi_    时间: 2014-7-16 00:48
c19t043 发表于 2014-7-15 22:42
  • interface IFlyable
  •     {
  •         void Fly();

  • 学习了~




    欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2