C# 以实现接口的类为例
我有一个抽象的基本模型类,它包含一些共享属性。除此之外,我还有一些次要的接口,这些接口定义了模型可用于哪些流程 下面是基类、接口和派生类的示例:C# 以实现接口的类为例,c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,我有一个抽象的基本模型类,它包含一些共享属性。除此之外,我还有一些次要的接口,这些接口定义了模型可用于哪些流程 下面是基类、接口和派生类的示例: public abstract class ModelBase { public ModelBase(string name) { Name = name; } public int Id { get; private set; } public int Name { get; privat
public abstract class ModelBase
{
public ModelBase(string name)
{
Name = name;
}
public int Id { get; private set; }
public int Name { get; private set; }
}
public interface ISupportProcessA
{
public decimal Amount { get; }
}
public class ModelDerived : ModelBase
{
public ModelDerived(string name) : base(name) { }
public decimal Amount { get; private set; }
}
为了使用基本模型执行一些工作,我还有一个抽象的基本处理器类,其中包含一些共享功能和一些派生的处理器类,每个进程一个。它可能是这样的:
public abstract class ProcessorBase
{
private readonly ModelBase model;
public ProcessorBase(ModelBase model)
{
this.model = model;
}
// ...some shared methods
}
public class ProcessorA : ProcessorBase
{
private readonly ISupportProcessA model;
public ProcessorA(ISupportProcessA model) : base(model)
{
this.model = model;
}
// ...some specific methods
}
现在问题就在这里。因为ISupportProcessA
与ModelBase
无关,因此不能作为base()
中的输入。这是有道理的
因此,我试图创建一个接口IModelBase
,而不是ModelBase
。然而,一旦我连接到实体框架,就会出现一些问题,因为实体框架不能很好地处理接口(或者可能只是我?)
所以我的问题是:
是否需要请求一个既从
ModelBase
派生又实现ISupportProcessA
的类?您可以通过泛型获得一些方法:
public class ProcessorA<TModel> : ProcessorBase where TModel : ModelBase, ISupportProcessA
{
private readonly ISupportProcessA model;
public ProcessorA(TModel model) : base(model)
{
this.model = model;
}
// ...some specific methods
}
这意味着您可以执行
ProcessorA processor=ProcessorA.Create(new Model())
,但要花费更多的样板文件。您可以通过泛型获得一些方法:
public class ProcessorA<TModel> : ProcessorBase where TModel : ModelBase, ISupportProcessA
{
private readonly ISupportProcessA model;
public ProcessorA(TModel model) : base(model)
{
this.model = model;
}
// ...some specific methods
}
这意味着您可以执行
ProcessorA processor=ProcessorA.Create(new Model())
,但要花费更多的样板文件。谢谢,我认为其中可能有一些要点是可行的。实际的实现(不幸的是)比我的简化示例-)要复杂一些。谢谢,我认为其中可能有一些要点是可行的。不幸的是,实际实现比我的简化示例-)要复杂一些。