我是一名 .NET 开发人员,非常了解 OOP。 然而,最近我注意到一个有趣的事实。
System.Data.SqlClient.SqlCommand
派生自
System.Data.Common.DbCommand
。后者实现了 System.IDbCommand
。
System.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/