Это академический вопрос. Возможно, за этим стоит проблема X-Y, которую я могу опубликовать отдельно позже. Но я на самом деле особенно заинтересован в академическом вопросе здесь.
Я часто нахожу, что у меня есть группы интерфейсов, все из которых имеют общие свойства. И я хочу определить базовый интерфейс для их обобщения, отчасти из-за отсутствия повторения и отчасти для того, чтобы я мог обходить объект и использовать общие методы, не зная точного типа.
Возможно, у меня есть IFooRepository
, IBarRepository
и т.д., и я могу объявить IRepository<TEntity>
.
Или у меня есть IHappyBot
, ISadBot
, IConfusedBot
, все из которых имеют IBot
.
Примечательно, что ни один из классов никогда не будет реализовывать эти базовые интерфейсы напрямую - у вас никогда не будет чего-то, что реализовано только IBot
.
Если бы мы говорили об иерархии классов, а не интерфейсах, я бы сказал: "Ах... базовая вещь - абстрактный класс".
Есть ли что-то аналогичное, что я могу сделать с интерфейсом для документирования ожидания того, что IBot
не будет напрямую реализовано.
Аспект этого, что меня интересует, - это то, что вы можете позже обнаружить с помощью отражения, так что, когда я проверил мою установку DI, я могу сказать "Ах, этот интерфейс не будет привязываться, потому что он" абстрактный".
В основном я забочусь о С#, но если эта особенность существует на других основных языках, интересно было бы услышать об этом.