Если один интерфейс наследовал другой интерфейс

Я ни в коем случае не являюсь авторитетным, но я полагаю, что единственный поддерживаемый путь от 6,5 до 7. Конечно, это было бы самым нормальным маршрутом, тогда я полагаю, что можно мигрировать от 7 непосредственно к 2005 довольно безболезненно.

Что касается сценариев всех объектов - я отговорил бы от него, поскольку Вы неизбежно пропустите что-то (если Ваша база данных не будет действительно тривиальна).

63
задан James McNellis 6 November 2009 в 17:08
поделиться

4 ответа

Наследование интерфейсов - отличный инструмент, хотя вы должны использовать его только тогда, когда интерфейс B действительно может быть заменен на интерфейс A, а не только для агрегирования слабо связанных поведений.

Трудно сказать, подходит ли он для вашей конкретной ситуации. случай, но ничего плохого в использовании практики в принципе нет. Вы все время видите это в первоклассных API. Вот лишь один типичный пример из .NET framework:

public interface ICollection<T> : IEnumerable<T>, IEnumerable
71
ответ дан 24 November 2019 в 16:22
поделиться

Конечно, возможно иметь дерево наследования интерфейсов и даже «множественное наследование» с интерфейсами. Правильно это или нет, зависит от рассматриваемых интерфейсов. Если действительно так, что интерфейс B является расширением или уточнением интерфейса A, то наследование имеет смысл, но если новое перечисление в значительной степени не связано с концепцией, выраженной интерфейсом A, я бы сделал их двумя отдельными интерфейсами и имел бы классы что необходимо реализовать оба интерфейса.

6
ответ дан 24 November 2019 в 16:22
поделиться

ИМО, это совершенно правильный подход, я не вижу в нем никаких проблем.

3
ответ дан 24 November 2019 в 16:22
поделиться

С технической точки зрения интерфейсы не наследуются друг от друга. Что на самом деле происходит, когда вы создаете IFoo , который наследуется от IBar , вы говорите, что любой класс, реализующий IFoo , также должен реализовывать IBar ].

interface IBar
{
    void DoBar();
}

interface IFoo : IBar
{
    void DoFoo();
}

В этом примере интерфейс IFoo не имеет метода DoBar () . В большинстве случаев различие не имеет значения, но оно может укусить вас при использовании отражения в интерфейсе, а не в классе.

9
ответ дан 24 November 2019 в 16:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: