我认为我不太了解泛型以使我的代码有效,但我无法找到解释为什么它不起作用。
我有这个通用的抽象类 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)
{
}
}
但这不符合我的需要。
有人可以向我解释一下我的理解错误吗?我想如何在 ControllerBase 中衍生出每个类中的 SpecificManager ?
提前致谢。
问候。
答案 0 :(得分:0)
以下方法可行,但语法稍长:
public class ControllerBase<TManager, TRepository>
where TManager : ManagerBase<TRepository>
where TRepository : RepositoryBase
/* */
public class SpecificController : ControllerBase<SpecificManager, SpecificRepository>