我有两个抽象类IExcelHelper和ICoreExcelHelper,它们由ExcelHelper和CoreExcelHelper继承。我有一个继承两个接口的类:IExcelHelper和ICoreExcelHelper。无论方法是否未实现,我都想访问抽象类的所有方法。在这里,我无法访问ExcelHelper的测试方法。
有什么建议吗?
public interface IExcelHelper
{
void GenerateReport();
}
public interface ICoreExcelHelper
{
void GenerateReport();
}
public abstract class ExcelHelper : IExcelHelper
{
public abstract void GenerateReport();
public void Test()
{
Console.WriteLine("Test");
}
}
public abstract class CoreExcelHelper : ICoreExcelHelper
{
public abstract void GenerateReport();
}
public class GenerateExcelStrategySummary : IExcelHelper, ICoreExcelHelper
{
void IExcelHelper.GenerateReport()
{
Console.WriteLine("GenerateReport");
}
void ICoreExcelHelper.GenerateReport()
{
Console.WriteLine("CoreGenerateReport");
}
}
class Program
{
static void Main(string[] args)
{
IExcelHelper obj = new GenerateExcelStrategySummary();
obj.GenerateReport();
obj.Test();
ICoreExcelHelper obj1 = new GenerateExcelStrategySummary();
obj1.GenerateReport();
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
答案 0 :(得分:0)
我认为,通过在两个不同的接口中使用相同的定义并不能真正获得任何收益,将接口转换为具体类型并不是一个好方法。 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();