[英]Generic return types from abstract/virtual methods
我有两个基类之间的关系:
public abstract class RecruiterBase<T>
{
// Properties declare here
// Constructors declared here
public abstract IQueryable<T> GetCandidates();
}
public abstract class CandidateBase<T>
{
// Properties declare here
// Constructors declared here
}
他们的具体实现如下:
public class CandidateA : CandidateBase<CandidateA>
{
// Constructors declared here
}
public class RecruiterA : RecruiterBase<RecruiterA>
{
// Constructors declared here
// ----HERE IS WHERE I AM BREAKING DOWN----
public override IQueryable<CandidateA> 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在SO上指定返回类型根据子类从基类中抽象的方法
我可以将我的concreate实现用于我重写的方法GetCandidates的返回类型,但这不是我想要的,我想利用不同抽象类的具体实现。 这是父/子数据库关系。 我想要达到的目标是什么? 我目前得到一个编译时错误,我的GetCandidates返回类型不匹配。
谢谢
看起来您需要定义多个泛型类型,其中一个可能被约束为派生自CandidateBase。
尝试这样的事情:
public abstract class RecruiterBase<T, C> where C : CandidateBase
{
// Properties declare here
// Constructors declared here
public abstract IQueryable<C> GetCandidates();
}
public abstract class CandidateBase<T>
{
// Properties declare here
// Constructors declared here
}
public class CandidateA : CandidateBase<CandidateA>
{
// Constructors declared here
}
public class RecruiterA : RecruiterBase<RecruiterA, CandidateA>
{
public override IQueryable<CandidateA> GetCandidates()
{
return from c in db.Candidates
where c.RecruiterId == this.RecruiterId
select new CandidateA
{
CandidateId = c.CandidateId,
CandidateName = c.CandidateName,
RecruiterId = c.RecruiterId
};
}
}
编辑包含克里斯的更正
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.