扩展方法、接口和继承带来的有趣现象
2009-08-11 18:38
281 查看
首先我们来看一个最简单的类和对应类的最简单的扩展方法:
这样A就扩展出一个HelloExt 方法来了, 可以这样调用:
然后我们来看看最简单的接口和对应接口的最简单的扩展方法:
让A实现IA接口,
就可以调用接口的HelloExt方法:
说到这里,可能有些人留意到了:A 和 IA 都同时扩展了HelloExt方法,那么前面例子的 a.HelloExt() 在这个时候还会调用了A的扩展方法吗?还是会调用接口IA里面的扩展方法?
可以看到扩展方法提示有重载:
最后运行可以看到A还是调用了自己的扩展方法
保持以上代码不变,只是去掉AExt里面的扩展方法,那么同样运行
A就又跑回接口IA的扩展方法里去
(汗~这是当然的了,只有一个还能跑哪里去)
那么,如果这样呢?
嗯...
两个扩展方法都出来了:
对于继承,让B去继承A,或者既继承A又实现IA:
public class B : A, IA 而最终B调用扩展方法也跟A一样。这里略去,有兴趣的朋友自己试试。 说到这里,令我想起这个现象跟一般接口继承其实是差不多的:
这篇文章可能对部分人来说并没有找到啥子“乐趣”,但我至少学到了很多。
谢谢!
这样A就扩展出一个HelloExt 方法来了, 可以这样调用:
然后我们来看看最简单的接口和对应接口的最简单的扩展方法:
让A实现IA接口,
就可以调用接口的HelloExt方法:
说到这里,可能有些人留意到了:A 和 IA 都同时扩展了HelloExt方法,那么前面例子的 a.HelloExt() 在这个时候还会调用了A的扩展方法吗?还是会调用接口IA里面的扩展方法?
可以看到扩展方法提示有重载:
最后运行可以看到A还是调用了自己的扩展方法
保持以上代码不变,只是去掉AExt里面的扩展方法,那么同样运行
A就又跑回接口IA的扩展方法里去
(汗~这是当然的了,只有一个还能跑哪里去)
那么,如果这样呢?
嗯...
两个扩展方法都出来了:
对于继承,让B去继承A,或者既继承A又实现IA:
public class B : A, IA 而最终B调用扩展方法也跟A一样。这里略去,有兴趣的朋友自己试试。 说到这里,令我想起这个现象跟一般接口继承其实是差不多的:
这篇文章可能对部分人来说并没有找到啥子“乐趣”,但我至少学到了很多。
谢谢!
相关文章推荐
- 扩展方法的一个有趣现象
- java 接口 继承 的有趣现象
- C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型
- 实现多线程有两种方法: Thread类继承和Runnable接口实现
- 一道小测试题,一个线程既实现了Runnable接口又继承Thread方法
- 关于继承和接口的一个非常有趣的比喻
- C#3.0 中使用扩展方法来扩展接口
- 判断某个类是否实现了某个接口或者继承了某个父类的方法
- Android 绑定Service的实现方法一:扩展Binder类来构建接口
- 基类显式继承接口,类继承基类时又继承同一接口,引发接口方法混乱(显式继承接口的弊端)
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- 地磅称量系统之(53)在封装对象的类库中实现包括IDataErrorInfo接口提供的所有方法和并且扩展对异常具有添加和删除功能的基本业务对象基类
- 多态理解,方法重写分析,类继承与接口实现中,方法重写的实现机制的区别
- 7.1面向对象(继承中成员方法关系,final关键字,多态,抽象类,接口)
- 扩展方法为我们带来了什么
- javascript继承扩展类方法实现
- HTML5之FileWriter继承扩展,增加方法或者对象
- 抽象方法、接口、继承、多态、图形计算器
- 实现多线程有两种方法: Thread类继承和Runnable接口实现
- .NET手记-定义类和接口的扩展方法