当借口IBase同时被Base类和IA继承时,继承自Base和IA的A类是否继承了IBase?
测试结果:是的
那么它是从Base类的实现继承的还是IA中的实现?
Switch(我是谁?)
Case (Base)a:我是继承自Base的实现
Case (IA)a:我是继承自IA的实现
Case(IBase)a:我是继承自IBase的实现
Case a:是否声明了其中的方法,如果是那么声明的优先,否则就是父类的实现。
这个结果提供了一种可能,即通过父类实现子类的通用功能,然后通过父接口应用到所有子接口中,而且子类中可以对相应的方法重写。
测试代码:

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);
}
}

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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架