由于接口实际上是一个类型,我总是将接口实现视为一种特殊的继承机制,将接口视为基类型,并将接口实现为派生类型。当创建'derived'类型的实例时,'base'类型中定义的方法,即接口,被添加到方法表中,然后将此'derived'类型本身定义的方法添加到方法中表也是。 当存在“孙子”类型时,它会将其父和祖父(接口)声明中定义的所有方法添加到其方法表中。当然,虚拟方法可以被覆盖。
我的解释是否正确? 在这个场景中似乎没有意义:如果孙子再次实现界面怎么办?像:
interface IFather { void m(); }
class Son: IFather{}
class Grandson : Son, IFather{}
Grandson
将接口中的方法添加到方法表中两次?
答案 0 :(得分:1)
如果孙子再次实施界面怎么办?像:
运行以下代码,无论是否1099
实施Grandson
并比较结果。
如果IFather
实施Grandson
:
儿子儿子儿子孙子孙子儿子孙子孙子 孙子
如果IFather
未实现Grandson
:
儿子儿子儿子孙子孙子孙子孙子孙子
因此,表达提及IFather
实现Grandson
的主要方案对于IFather
shadows / hides属性/方法的时间有所不同来自Grandson
(在这种情况下为Son
)。使用阴影/隐藏是非常罕见的,所以实际上很少有任何区别 - 指定两次实现接口通常没有影响(它的行为与指定它一样)。
TypeName