抽象/虚拟方法的通用返回类型

我有两个基类之间的关系:

public abstract class RecruiterBase { // Properties declare here // Constructors declared here public abstract IQueryable GetCandidates(); } public abstract class CandidateBase { // Properties declare here // Constructors declared here } 

他们的具体实现如下:

 public class CandidateA : CandidateBase { // Constructors declared here } public class RecruiterA : RecruiterBase { // Constructors declared here // ----HERE IS WHERE I AM BREAKING DOWN---- public override IQueryable GetCandidates() { return from c in db.Candidates where c.RecruiterId == this.RecruiterId select new CandidateA { CandidateId = c.CandidateId, CandidateName = c.CandidateName, RecruiterId = c.RecruiterId }; } } 

每个MSDN文档http://msdn.microsoft.com/en-us/library/ms379564%28VS.80%29.aspx (大约一半)和一个类似的(但不完全相同)的questoin on SO 指定返回类型根据子类从基类中抽象的方法

我可以将我的concreate实现用于我重写的方法GetCandidates的返回类型,但这不是我想要的,我想利用不同抽象类的具体实现。 这是父/子数据库关系。 我想要实现的目标是什么? 我目前得到一个编译时错误,我的GetCandidates返回类型不匹配。

谢谢

看起来您需要定义多个generics类型,其中一个可能被约束为派生自CandidateBase。

尝试这样的事情:

 public abstract class RecruiterBase where C : CandidateBase { // Properties declare here // Constructors declared here public abstract IQueryable GetCandidates(); } public abstract class CandidateBase { // Properties declare here // Constructors declared here } public class CandidateA : CandidateBase { // Constructors declared here } public class RecruiterA : RecruiterBase { public override IQueryable GetCandidates() { return from c in db.Candidates where c.RecruiterId == this.RecruiterId select new CandidateA { CandidateId = c.CandidateId, CandidateName = c.CandidateName, RecruiterId = c.RecruiterId }; } } 

编辑包含克里斯的更正