如何链接泛型和派生类型
本文关键字:泛型 派生 类型 链接 何链接 | 更新日期: 2023-09-27 18:01:25
我认为我对泛型的理解不够好,无法使我的代码工作,但我找不到一个解释为什么它不起作用。
我有这个通用抽象类Repository:
public abstract class RepositoryBase
{
}
我必须实例化它为SpecificRepository:
public class SpecificRepository : RepositoryBase
{
}
现在,我有了这个泛型抽象类ManagerBase,它使用了一个泛型类型,必须从RepositoryBase派生:
public abstract class ManagerBase<T> where T : RepositoryBase
{
public T repository;
protected ManagerBase(T repository)
{
this.repository = repository;
}
}
我必须实例化SpecificManager:
public class SpecificManager : ManagerBase<SpecificRepository>
{
public SpecificManager(SpecificRepository repostRepository) : base(repostRepository)
{
}
}
这样,我就可以在每个从ManagerBase派生的类中有一个从RepositoryBase派生的类。
但是我不能有一个ControllerBase和一个SpecificController,例如:
public class ControllerBase<T> where T : ManagerBase<RepositoryBase>
{
public T manager;
protected ControllerBase(T manager)
{
this.manager = manager;
}
}
public class SpecificController : ControllerBase<SpecificManager>
{
public SpecificController(SpecificManager manager) : base(manager)
{
}
}
看来我能做到:
public abstract class ControllerBase<T> where T : ManagerBase<SpecificRepository>
{
public T manager;
protected ControllerBase(T manager)
{
this.manager = manager;
}
}
public class SpecificController : ControllerBase<SpecificManager>
{
public SpecificController(SpecificManager manager) : base(manager)
{
}
}
这并不适合我的需要。
有人可以向我解释什么我理解错了,我应该如何继续能够有一个SpecificManager在每个类派生自ControllerBase ?
提前感谢。
问候。
虽然语法稍长,但下面的代码可以工作:
public class ControllerBase<TManager, TRepository>
where TManager : ManagerBase<TRepository>
where TRepository : RepositoryBase
/* */
public class SpecificController : ControllerBase<SpecificManager, SpecificRepository>