我有一些像这样的基础类:
public class AbstractData
{
public int ID { get; set; }
}
public class Person: AbstractData
{
public string Name { get; set; }
}
public class AbstractManager<T> where T: AbstractData
{
public virtual List<T> GetAll()
{
}
public virtual T GetOne(int id)
{
}
}
public class PersonManager: AbstractManager<Person>
{
public override List<Person> GetAll()
{
//...
}
public override Person GetOne(int id)
{
//...
}
}
现在,我有一个 Windows Forms 基类,如下所示:
public class BaseForm: Form
{
public virtual AbstractManager<T> GetManager<T>() where T: AbstractData
{
return null;
}
}
还有一种派生形式:
public class PersonForm: BaseForm
{
public override AbstractManager<T> GetManager<T>()
{
return new PersonManager();
}
}
问题在于,我在PersonForm类上一直收到编译错误:
无法隐式转换类型“PersonManager”为“AbstractManager”
是否有一种方法,可以创建此虚拟方法并使从BaseForm派生的每个类返回AbstractManager的具体表示形式?
如果我在AbstractManager类上去掉泛型,那么我可以通过编译(进行一些代码更改),但是GetAll方法无法返回List。它必须返回List,这会导致从List转换为List时出现问题。
任何帮助将不胜感激。
where T: AbstractData
而不是where T: AbstractManager
,对吗? - Daniel J.G.