gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:24:12 27 4
gpt4 key购买 nike

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

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 (大约下降了一半)以及关于 SO 的类似(但不相同)问题 Specifying the return type of an abstract method from a Base Class according to a Sub Class

我可以对重写方法 GetCandidates 的返回类型使用我的 concreate 实现,但这不是我想要的,我想使用不同抽象类的具体实现。这是父/子数据库关系。我想要实现的目标是可能的吗?我目前收到编译时错误,我的 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
};
}
}

编辑包括克里斯的更正

关于c# - 抽象/虚拟方法的通用返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1330473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com