Er. Dinesh Sharma Ответов: 2

Абстрактный класс C#, реализующий интерфейс


Привет Эксперты,

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

1) Каковы преимущества наследования интерфейса в абстрактном классе?когда мы идем на такой подход?Является ли это хорошей практикой? Действительно ли это дубликат кода в обоих местах?

е.г
public interface IService
    {
        void Add();
        void Mul();
    }
    //First Case
    public abstract class ServiceOne : IService
    {
        public abstract void Add();
        public abstract void Mul();
    }
    //Second Case
    public abstract class ServiceTwo : IService
    {
        public void Add(){}
        public void Mul(){}
    }

    public class S1 : ServiceOne
    {
        public override void Add(){}
        public override void Mul() {}
    }
    public class S2 : ServiceTwo
    { }



Таким образом, в приведенном выше примере у нас есть интерфейс IService и два метода add() и mul().И тот же метод наследуется в (случае 1) абстрактном классе Serviceone и снова его абстрактный метод здесь в (случае 2) наследуется в абстрактном классе ServiceTwo, но обеспечивает реализацию метода интерфейса.


Спасибо
Динеш

Что я уже пробовал:

What are basic benefits of doing that duplication of code in interface and abstract class.

[no name]

Дубликата нет. Интерфейсы не содержат кода. Интерфейс-это контракт, а не реализация.

Er. Dinesh Sharma

Когда нам нужен этот подход, тот же метод в интерфейсе и тот же абстрактный класс, который его унаследовал.

2 Ответов

Рейтинг:
1

CPallini

Если абстрактные классы просто воспроизводят сигнатуру интерфейса (как в вашем сценарии), то это почти бесполезно. Вообще говоря, абстрактный класс действительно увеличивает сигнатуру интерфейса или обеспечивает некоторую реализацию. Такие особенности делают его полезным.


Рейтинг:
1

F-ES Sitecore

Я бы не стал этого делать, если IService уже не определен и не используется где-то еще для каких-то других целей. Если вы хотите взять существующий интерфейс и реализовать его в абстрактном классе, я думаю, это нормально. Однако, как уже упоминалось, если интерфейс определен исключительно с целью определения методов абстрактного класса, тогда это бессмысленно. Единственное предостережение, что это может быть, если вас где-то интересует только подмножество методов. Таким образом, IService может иметь «Добавить» и «Удалить», но абстрактный класс может также иметь «Сортировка», «Обратный» и т. Д., И у вас могут быть другие классы, которые интересуются только объектами, которые используют «Добавить» и «Удалить», поэтому вы может передавать этому объекту объекты, реализующие IService.