Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

Зачем класс реализует интерфейс, который наследуется другим интерфейсом этого класса?

Просматривая исходник AutoMapper, наткнулся на интересную вещь:
Класс Mapper
public class Mapper : IRuntimeMapper, IMapper { //...
Интерфейс IRuntimeMapper
public interface IRuntimeMapper : IMapper { //...

Вопрос
Зачем Mapper реализует IMapper, если IRuntimeMapper уже наследует его? Такая "ошибка" возникла в ходе расширения библиотеки или это нормальная практика?


Ответ

Если вы просматривали декомпилированный исходник, то это нормально. Для сравнения: Исходники BlockingCollection и описание на МСДН. JetBrains decompiler показывает состояние как в справке, несмотря на то, что сорцы явно другие.
У меня есть две основных идеи, почему так. Либо информация о всех реализуемых интерфейсах хранится в одном месте и не пытается строить дерево наследования каждый раз(и по этой инфе декомпилят инструменты), либо это сделано просто для удобства, чтобы не пытаться вспоминать каждый раз, а реализует ли каждый из этих интерфейсов ещё какие то.

Комментариев нет:

Отправить комментарий