2016-11-07 6 views
2

SqlDataReader's класс оператор включает в себя IDataReader, IDataRecord и IDisposable, даже если все они выполнены его базовый классом, DbDataReader:Ключевое слово класса - явно указывать унаследованные интерфейсы?

public class SqlDataReader : DbDataReader, 
    IDataReader, IDisposable, IDataRecord {...} 

public abstract class DbDataReader : MarshalByRefObject, 
    IDataReader, IDisposable, IDataRecord, IEnumerable {...} 

В этом случае, есть некоторое техническое преимущество, указывающие, что производный класс реализует интерфейсы, ИТС базовый класс уже указывает, что он реализует? (Я не могу придумать этого. Удивление, если это устаревшая реликвия, опечатка или что-то сделано для целей документации.)

+0

Где вы это видели? Не удается увидеть это на сайте [sourcesource.microsoft.com] (https://referencesource.microsoft.com/#System.Data/System/Data/SqlClient/SqlDataReader.cs). – Dmitry

+0

@Dmitry, ну 'IDataReader' определен в обоих, но ответ нет, нет причин добавлять избыточные объявления интерфейса. –

+2

@KirkWoll Что касается явной реализации интерфейса? В классе 'SqlDataReader' есть один:' IDataReader IDataRecord.GetData (int i) '. – Dmitry

ответ

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, поэтому он не может переопределить реализацию базового класса.

0

Это имеет смысл, если вы хотите явно реализовать какой-либо интерфейс.
Например:

interface ISome 
{ 
    void Method(); 
} 

class A : ISome 
{ 
    public void Method() 
    { 
    } 
} 

class B : A, ISome // Try to remove ISome... 
{ 
    void ISome.Method() 
    { 
    } 
} 

Если закомментировать ISome в B декларации, компиляция потерпит неудачу.

Смежные вопросы