2010-11-19 243 views
0

繼承我有一個抽象類:如何有一個泛型類型從一個泛型類型

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

回答

0

您的JobManagerBase嘗試使用LMManager,參數爲ENTITYILM_ENTITY
由於這些參數不符合您的約束條件,因此會出現錯誤。 (如果有人讓一個JobManagerBase<int, string>?)

您需要泛型參數和相同where條款添加到JobManagerBase,以確保其參數滿足要求LMManager的約束。

+0

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