我有两个基类之间的关系:
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 http://msdn.microsoft.com/en-us/library/ms379564%28VS.80%29.aspx(大约下降了一半)
以及关于 SO 的类似(但不相同)问题根据子类指定基类抽象方法的返回类型 https://stackoverflow.com/questions/675857/c-specifying-the-return-type-of-an-abstract-method-from-a-base-class-according
我可以利用我的具体实现来实现重写方法 GetCandidates 的返回类型,但这不是我想要的,我想利用不同抽象类的具体实现。这是父/子数据库关系。我想要实现的目标可能吗?我当前收到一个编译时错误,表明我的 GetCandidates 返回类型不匹配。
Thanks
看起来您需要定义多个泛型类型,其中一种可能被限制为从 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
};
}
}
Edit包括克里斯的更正
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)