c# - 奇怪的继承修改

标签 c# .net oop inheritance abstraction

我是一名 .NET 开发人员,非常了解 OOP。 然而,最近我注意到一个有趣的事实。

System.Data.SqlClient.SqlCommand 派生自 System.Data.Common.DbCommand。后者实现了 System.IDbCommandSystem.IDbCommand 公开属性 Connection,它是 IDbConnection 的一个实例。 在 DbCommand 但是这个属性返回 DbConnection 类型。最后,SqlCommand 中的相同属性是 SqlConnection

类型

我尝试执行相同的操作,但它给出了编译时错误。在上面的示例中,这是如何实现的?我如何重新创建相同的模式?

我的代码(未编译):

public interface IFoo { }
public interface IBar 
{
   IFoo TheFoo();
}

public abstract class AbsFoo : IFoo { }
public abstract class AbsBar : IBar 
{
    public abstract AbsFoo TheFoo();
}

public class ConcreteFoo : AbsFoo { }
public class ConcreteBar : AbsBar { }

最佳答案

Explicit interface implementation是这里的游戏名称。试试这个:

public abstract class AbsBar : IBar {
    IFoo IFoo.TheFoo() { return this.TheFoo(); }
    public abstract AbsFoo TheFoo();
}

这里有一个很好的指南 implicit vs. explicit implementation .

关于c# - 奇怪的继承修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921551/

相关文章:

java - 复制包含另一个对象的父类(super class)的对象

perl - 在 Perl 中预期的偶数列表中找到引用 - 可能的传递引用错误?

c# - 等待后台线程完成

c# - 电子邮件验证

c# - 单元测试策略 - 验证私有(private)字段的状态

c# - 如何反转堆叠条中的轴?

.net - 您是否已将 .NET 计算应用程序部署到 Windows Azure 之外的云中?

c# - 如何在 block 内的异步查询的使用 block 中保持 SqlConnection 打开?

c# - 在 C# 中更新多维字节数组

oop - 私有(private)变量还是 protected 变量?