接口和类混合继承的问题

当借口IBase同时被Base类和IA继承时,继承自Base和IA的A类是否继承了IBase?

测试结果:是的

那么它是从Base类的实现继承的还是IA中的实现?

Switch(我是谁?)

Case (Base)a:我是继承自Base的实现

Case (IA)a:我是继承自IA的实现

Case(IBase)a:我是继承自IBase的实现

Case a:是否声明了其中的方法,如果是那么声明的优先,否则就是父类的实现。

这个结果提供了一种可能,即通过父类实现子类的通用功能,然后通过父接口应用到所有子接口中,而且子类中可以对相应的方法重写。

测试代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
namespace ArchitectureTesting
{
    
internal class A : Base, IA, IBase
    {
        
// Methods
        public A();
        
void IBase.Write();
    }

    
internal class Base : IBase
    {
        
// Methods
        public Base();
        
public void Write();
    }

    
public interface IA : IBase
    {
    }

    
public interface IBase
    {
        
// Methods
        void Write();
    }

    
internal class InterfaceTesting
    {
        
// Methods
        public InterfaceTesting();
        
public static void Run();
    }

    
internal class Program
    {
        
// Methods
        public Program();
        
private static void Main(string[] args);
    }
}

 

 

ContractedBlock.gif ExpandedBlockStart.gif IL
.namespace ArchitectureTesting
{
    .
class private auto ansi beforefieldinit A
        extends ArchitectureTesting.Base
        implements ArchitectureTesting.IA, ArchitectureTesting.IBase
    {
        .method 
public hidebysig specialname rtspecialname instance void .ctor() cil managed
        {
        }

        .method 
private hidebysig newslot virtual final instance void ArchitectureTesting.IBase.Write() cil managed
        {
            .
override ArchitectureTesting.IBase::Write
        }

    }

    .
class private auto ansi beforefieldinit Base
        extends [mscorlib]System.Object
        implements ArchitectureTesting.IBase
    {
        .method 
public hidebysig specialname rtspecialname instance void .ctor() cil managed
        {
        }

        .method 
public hidebysig newslot virtual final instance void Write() cil managed
        {
        }

    }

    .
class public interface abstract auto ansi IA
        implements ArchitectureTesting.IBase
    {
    }

    .
class public interface abstract auto ansi IBase
    {
        .method 
public hidebysig newslot abstract virtual instance void Write() cil managed
        {
        }

    }

    .
class private auto ansi beforefieldinit InterfaceTesting
        extends [mscorlib]System.Object
    {
        .method 
public hidebysig specialname rtspecialname instance void .ctor() cil managed
        {
        }

        .method 
public hidebysig static void Run() cil managed
        {
        }

    }

    .
class private auto ansi beforefieldinit Program
        extends [mscorlib]System.Object
    {
        .method 
public hidebysig specialname rtspecialname instance void .ctor() cil managed
        {
        }

        .method 
private hidebysig static void Main(string[] args) cil managed
        {
            .entrypoint
        }

    }
}

 
Collapse Types
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值