【发布时间】:2014-06-19 05:45:35
【问题描述】:
我认为我对泛型的理解不足以让我的代码工作,但我找不到解释为什么它不起作用。
我有这个通用抽象类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 ? p>
提前致谢。
问候。
【问题讨论】:
-
假设您有一个泛型类型
G<T>(因此,有一个类型参数称为T)。进一步假设您还有两种类型,T1和T2,并且这些类型之间具有某种形式的继承关系。仅仅因为它们具有这种继承关系,那 not 是否意味着G<T1>和G<T2>类型具有那种 same 关系。事实上,G<T1>和G<T2>类型之间没有继承关系。
标签: c# oop generics derived-class