2010-11-19 9 views
0

J'ai une classe abstraite:Comment avoir un type générique hériter d'un type générique

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

ENTITÉ est une sorte de DataObject, ILM_ENTITY, IActiveRecord et ICallOnCreated sont des interfaces que les implémente DataObject.

En général, je sous-classe ce gars avec des classes quelque chose comme

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

Maintenant, j'ai un cas où deux des sous-classes ont un code en commun, donc je veux insérer une autre couche entre les deux, quelque chose comme

public abstract class JobManagerBase : LMManager<ENTITY, ILM_ENTITY> 

puis changer les deux autres gars à

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

Dans la définition de mon JobManagerBase, je reçois quatre erreurs liées à ENTITÉ:

  1. doit être un type non abstrait avec un constructeur parameterless publique
  2. Pas de conversion de boxe ou de conversion paramètre de type de ENTITÉ à ICallOnCreated
  3. Pas de conversion de la boxe ou le type de conversion paramètre de ENTITÉ à IActiveRecord
  4. Aucune conversion de boxe ou de type paramètre conversion de ENTITÉ à
  5. ILM_ENTITY

Est c'est terriblement évident ce qui me manque?

+0

N'utilisez pas de capuchons. De plus, les paramètres génériques devraient commencer par 'T'. – SLaks

+0

Voulez-vous dire 'JobManagerBase : LMManager '? – SLaks

Répondre

0

Votre JobManagerBase tente d'utiliser LMManager avec les paramètres ENTITY et.
Étant donné que ces paramètres ne répondent pas à vos contraintes, vous obtenez une erreur. (Et si quelqu'un fait un JobManagerBase<int, string>?)

Vous devez ajouter des paramètres génériques et même where clause JobManagerBase pour faire en sorte que ses paramètres répondent aux contraintes nécessaires à LMManager.

+0

Je vois. Je vous remercie! –

Questions connexes