У меня есть абстрактный класс:
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:
- Должен быть неабстрактным типом с открытым конструктором без параметров
- Нет преобразования в бокс или преобразования параметров типа из ENTITY в ICallOnCreated
- Нет преобразования в бокс или преобразования параметров типа из ENTITY в IActiveRecord
- Нет преобразования в бокс или преобразования параметров типа из ENTITY в ILM_ENTITY
Страшно очевидно, чего мне не хватает?