如何从泛型类型继承泛型类型

时间:2010-11-19 17:15:41

标签: templates c#-3.0

我有一个抽象类:

public abstract class LMManager<ENTITY, ILM_ENTITY> where ENTITY : ILM_ENTITY, IActiveRecord, ICallOnCreated, new( )

ENTITY是某种DataObject,ILM_ENTITY,IActiveRecord和ICallOnCreated是DataObject实现的接口。

通常情况下,我使用类似

的类对这个人进行子类化
public class JobManager : LMManager<Job, ILMJob>
public class JobViewManager : LMManager<vwJob, ILMJobView>

现在,我有一个案例,其中两个子类有一些共同的代码,所以我想在它们之间插入另一个层,比如

public abstract class JobManagerBase : LMManager<ENTITY, ILM_ENTITY>

然后将其他两个人改为

public class JobManager : JobManagerBase<Job, ILMJob>
public class JobViewManager : JobManagerBase<vwJob, ILMJobView>

在我的JobManagerBase的定义中,我得到了与ENTITY相关的四个错误:

  1. 必须是具有公共无参数构造函数的非抽象类型
  2. 没有从ENTITY到ICallOnCreated的装箱转换或类型参数转换
  3. 没有从ENTITY到IActiveRecord的装箱转换或类型参数转换
  4. 没有装箱转换或类型参数从ENTITY转换为ILM_ENTITY
  5. 我错过了什么非常明显?

1 个答案:

答案 0 :(得分:0)

您的JobManagerBase尝试将LMManager与参数ENTITYILM_ENTITY一起使用。
由于这些参数不符合您的约束,因此会出现错误。 (如果有人制作JobManagerBase<int, string>会怎么样?)

您需要将通用参数和相同的where子句添加到JobManagerBase,以确保其参数符合LMManager所需的约束。