Представьте себе ситуацию, как
public class ExportController : IExportFeed
public class ImportController : IImportFeed
давайте предположим, что в экспорте случае мы имеем некоторые операции, общие для всех исполнителей IExportFeed. Таким образом, можно переместить эти операции в некоторый базовый абстрактный класс для иерархии IExportFeed. То же самое для IImportFeed.
Но что, если у нас есть общие операции для обеих этих иерархий? мы можем сделать что-то вроде
public abstract class ImportExportController : IExportFeed, IImportFeed
и наследовать экспорт или импорт классов от этого.
Но этот дизайн перерывы минимум пару ТВЕРДЫХ принципов, и это будет беспорядок, если вы решили добавить anoter подающие интерфейсы
Решение переместить эту общую между иерархии функциональных возможностей в родовое (шаблон)
public class ExportController : AbstractFeedController<IExportFeed>
public class ImportController : AbstractFeedController<IImportFeed>
и т.д.
все будет становиться очень ясно, как только вы посмотрите на определение '' AbstractFeedController. –
CodeCaster
И поскольку есть около десяти тысяч потенциальных дубликатов, я не могу найти тот, который правильно объясняет это, поэтому не стесняйтесь отвечать на это, а также фрагментировать информацию на этом сайте еще больше. Все это объясняется в первых абзацах первого хита Google для «наследования на C# из базового базового класса»: [MSDN: общие классы (руководство по программированию на C#)] (https://msdn.microsoft.com/en-us /library/sz6zd40f.aspx). – CodeCaster