Я бы сказал, что вы ничего не получите, имея одно и то же определение в двух разных интерфейсах, и что приведение интерфейсов к конкретным типам не является хорошим подходом. Оба определения в IExcelHelper и ICoreExcelHelper будут выполнять одну и ту же фундаментальную задачу - генерировать отчет, но по-разному. Я бы определил один интерфейс отчета, чтобы объект стратегии возвращал экземпляр или принимал экземпляр в качестве зависимости. Возможность использования интерфейсов заключается в возможности кодировать поведение, а не конкретный тип.
public interface IGenerateReport {
void GenerateReport();
void Test();
}
public abstract class HelperBase : IGenerateReport {
public abstract void GenerateReport();
public void Test() {
Console.WriteLine("Test");
}
}
public class ExcelHelper : HelperBase {
public override void GenerateReport()
{
//I generate my report this way
}
}
public class CoreHelper : HelperBase {
public override void GenerateReport()
{
//I will generate my report in a totally different way
}
}
Это позволит вам определить ваши типы как HelperBase или IGenerateReport , и у вас будет доступ ко всем вашим методам.
IGenerateReport helper = new ExcelHelper();
helper.Test();
helper.GenerateReport();
helper = new CoreHelper();
helper.Test();
helper.GenerateReport();
HelperBase helper2 = new ExcelHelper();
helper2.Test();
helper2.GenerateReport();