SqlDataReader's类语句包括IDataReader,IDataRecord和IDisposable,即使这些都是由其基类DbDataReader实现的:
public class SqlDataReader : DbDataReader,
IDataReader, IDisposable, IDataRecord {...}
public abstract class DbDataReader : MarshalByRefObject,
IDataReader, IDisposable, IDataRecord, IEnumerable {...}
在这种情况下,是否有一些技术优势来指示派生类实现其基类已经指示它实现的接口? (我想不出一个。想知道这是遗留的遗物,拼写错误还是用于文档目的的东西。)
答案 0 :(得分:3)
这可以在派生类中添加或覆盖显式接口实现。例如,
interface IFoo
{
string P {get;}
}
class Base: IFoo
{
string IFoo.P
{
get { return "Base"; }
}
}
class Derived: Base, IFoo
{
string IFoo.P
{
get { return "Derived"; }
}
}
如果Derived
未直接实现IFoo
,则无法定义IFoo.P
的显式实现,因此无法覆盖基类中的实现。
答案 1 :(得分:0)
如果你想明确地实现一些接口,这是有道理的 例如:
interface ISome
{
void Method();
}
class A : ISome
{
public void Method()
{
}
}
class B : A, ISome // Try to remove ISome...
{
void ISome.Method()
{
}
}
如果您在ISome
声明中注释掉B
,则编译将失败。