继承和接口实现机制之间的本质区别是什么?

时间:2017-08-26 01:06:17

标签: c#

由于接口实际上是一个类型,我总是将接口实现视为一种特殊的继承机制,将接口视为基类型,并将接口实现为派生类型。当创建'derived'类型的实例时,'base'类型中定义的方法,即接口,被添加到方法表中,然后将此'derived'类型本身定义的方法添加到方法中表也​​是。 当存在“孙子”类型时,它会将其父和祖父(接口)声明中定义的所有方法添加到其方法表中。当然,虚拟方法可以被覆盖。

我的解释是否正确? 在这个场景中似乎没有意义:如果孙子再次实现界面怎么办?像:

interface IFather { void m(); }

class Son: IFather{}

class Grandson : Son, IFather{}

Grandson将接口中的方法添加到方法表中两次?

1 个答案:

答案 0 :(得分:1)

  

如果孙子再次实施界面怎么办?像:

运行以下代码,无论是否1099实施Grandson并比较结果。

如果IFather实施Grandson

  儿子儿子儿子孙子孙子儿子孙子孙子   孙子

如果IFather未实现Grandson

  儿子儿子儿子孙子孙子孙子孙子孙子

因此,表达提及IFather实现Grandson的主要方案对于IFather shadows / hides属性/方法的时间有所不同来自Grandson(在这种情况下为Son)。使用阴影/隐藏是非常罕见的,所以实际上很少有任何区别 - 指定两次实现接口通常没有影响(它的行为与指定它一样)。

TypeName