абстрактный класс не реализует интерфейс

У меня есть интерфейс, таким образом, писатели класса вынуждены реализовать определенные методы. Я также хочу позволить некоторые реализованные методы по умолчанию, таким образом, я создаю абстрактный класс. Проблема состоит в том, что все классы наследовались базовому классу, таким образом, у меня есть некоторые функции помощника там.

Я пытался записать: IClass в с абстрактной основой, но я получил ошибку, что основа не реализовала Интерфейс. Хорошо, конечно, потому что я хочу этот краткий обзор и сделать, чтобы пользователи реализовали те методы. Как эхо-сигнал, если я использую основу, я не могу назвать интерфейсные методы класса. Если я использую интерфейс, я не могу получить доступ к базовым методам.

Как я делаю его так, я могу иметь эти классы помощника и вынудить пользователей реализовать определенные методы?

9
задан Null 4 September 2015 в 19:40
поделиться

2 ответа

Переместите методы интерфейса в абстрактный класс и объявите их также абстрактными. Таким образом, производные классы будут вынуждены реализовывать их. Если вам нужно поведение по умолчанию, используйте абстрактные классы, если вы хотите, чтобы только сигнатура была фиксированной, используйте интерфейс. Обе концепции не смешиваются.

6
ответ дан 4 December 2019 в 10:03
поделиться

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

interface IInterface {
   void Do();
   void Go();
}

abstract class ClassBase : IInterface {

    public virtual void Do() {
         // Default behaviour
    }

    public abstract void Go();  // No default behaviour

}

class ConcreteClass : ClassBase {

    public override void Do() {
         // Specialised behaviour
    }

    public override void Go() {
        // ...
    }

}
15
ответ дан 4 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

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