Class 关键字 - 明确指示继承接口?
Class Keyword - Explicitly Indicating Inherited Interfaces?
SqlDataReader's class statement includes IDataReader, IDataRecord and IDisposable even though these are all implemented by its base class, DbDataReader:
public class SqlDataReader : DbDataReader,
IDataReader, IDisposable, IDataRecord {...}
public abstract class DbDataReader : MarshalByRefObject,
IDataReader, IDisposable, IDataRecord, IEnumerable {...}
在这种情况下,指示派生 class 实现其基础 class 已经指示其实现的接口是否有一些技术优势? (我想不出一个。想知道这是遗留遗物、打字错误还是出于文档目的所做的事情。)
可以这样做,以便在派生 class 中添加或覆盖显式接口实现。例如,
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
的显式实现,所以它不能覆盖基础class中的实现。
如果您想显式实现某些接口,这很有意义。
例如:
interface ISome
{
void Method();
}
class A : ISome
{
public void Method()
{
}
}
class B : A, ISome // Try to remove ISome...
{
void ISome.Method()
{
}
}
如果在B
声明中注释掉ISome
,编译会失败。
SqlDataReader's class statement includes IDataReader, IDataRecord and IDisposable even though these are all implemented by its base class, DbDataReader:
public class SqlDataReader : DbDataReader,
IDataReader, IDisposable, IDataRecord {...}
public abstract class DbDataReader : MarshalByRefObject,
IDataReader, IDisposable, IDataRecord, IEnumerable {...}
在这种情况下,指示派生 class 实现其基础 class 已经指示其实现的接口是否有一些技术优势? (我想不出一个。想知道这是遗留遗物、打字错误还是出于文档目的所做的事情。)
可以这样做,以便在派生 class 中添加或覆盖显式接口实现。例如,
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
的显式实现,所以它不能覆盖基础class中的实现。
如果您想显式实现某些接口,这很有意义。
例如:
interface ISome
{
void Method();
}
class A : ISome
{
public void Method()
{
}
}
class B : A, ISome // Try to remove ISome...
{
void ISome.Method()
{
}
}
如果在B
声明中注释掉ISome
,编译会失败。