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,编译会失败。