随笔- 51  评论- 916  文章- 1 

扩展方法、接口和继承带来的有趣现象

首先我们来看一个最简单的类和对应类的最简单的扩展方法:

image

这样A就扩展出一个HelloExt 方法来了, 可以这样调用:

image

然后我们来看看最简单的接口和对应接口的最简单的扩展方法:

image

让A实现IA接口,

image

就可以调用接口的HelloExt方法:

image

说到这里,可能有些人留意到了:A 和 IA 都同时扩展了HelloExt方法,那么前面例子的 a.HelloExt() 在这个时候还会调用了A的扩展方法吗?还是会调用接口IA里面的扩展方法?

可以看到扩展方法提示有重载:

image

最后运行可以看到A还是调用了自己的扩展方法

image

保持以上代码不变,只是去掉AExt里面的扩展方法,那么同样运行

image

A就又跑回接口IA的扩展方法里去 

image

(汗~这是当然的了,只有一个还能跑哪里去)

那么,如果这样呢?

image

嗯...

两个扩展方法都出来了:

image

对于继承,让B去继承A,或者既继承A又实现IA:

public class B : A, IA

而最终B调用扩展方法也跟A一样。这里略去,有兴趣的朋友自己试试。

说到这里,令我想起这个现象跟一般接口继承其实是差不多的:

image

这篇文章可能对部分人来说并没有找到啥子“乐趣”,但我至少学到了很多。

谢谢!

posted on 2009-08-11 18:38  CoolCode  阅读(...)  评论(...编辑  收藏