如何有一个泛型类型从一个泛型类型

问题描述:

继承我有一个抽象类:如何有一个泛型类型从一个泛型类型

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

实体是某种数据对象,ILM_ENTITY,IActiveRecord,并ICallOnCreated是该数据对象器具接口。

通常情况下,我继承这个家伙带班像

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的定义,我得到有关实体四大误区:

  1. 必须是一个非抽象类有一个公共的无参数的构造函数
  2. 从实体没有装箱转换或类型参数转换为ICallOnCreated
  3. 从实体没有装箱转换或类型参数转换为IActiveRecord
  4. 从实体没有装箱转换或类型参数转换为ILM_ENTITY

是这是非常明显的,我失踪了?

+0

请勿使用全部大写字母。另外,通用参数应该以'T'开始。 – SLaks 2010-11-19 17:20:05

+0

您的意思是'JobManagerBase :LMManager '? – SLaks 2010-11-19 17:22:43

您的JobManagerBase尝试使用LMManager,参数为ENTITYILM_ENTITY
由于这些参数不符合您的约束条件,因此会出现错误。 (如果有人让一个JobManagerBase<int, string>?)

您需要泛型参数和相同where条款添加到JobManagerBase,以确保其参数满足要求LMManager的约束。

+0

我明白了。谢谢! – 2010-11-19 17:41:03