Ich habe eine Beziehung zwischen zwei Basisklassen:Generika Rückgabetypen von abstrakten/virtuellen Methoden
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
}
Und ihren konkreten Implementierungen als solche:
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
};
}
}
Per MSDN-Dokumentation http://msdn.microsoft.com/en-us/library/ms379564%28VS.80%29.aspx (etwa auf halbem Weg unten) und ein ähnlich (aber nicht identisch) questoin auf SO Specifying the return type of an abstract method from a Base Class according to a Sub Class
Ich kann meine Concreate-Implementierung für den Rückgabetyp meiner überschriebenen Methode GetCandidates verwenden, aber das will ich nicht, ich möchte die konkrete Implementierung einer anderen abstrakten Klasse nutzen. Dies ist eine Eltern/Kind-Datenbankbeziehung. Ist das, was ich erreichen will, möglich? Ich erhalte zur Zeit einen Kompilierzeitfehler, dass mein Rückgabetyp GetCandidates nicht übereinstimmt.
Dank
Und Sie schlugen mich darauf. –
Wird er nicht brauchen öffentliche Klasse RecruiterA: RecruiterBase –
Mist, das war mein Verdacht, aber es gibt mehrere Entitäten in meinem Datenmodell wie Manager-> Kandidat, Kandidat-> Termin, etc ... Also ich Ich werde alle diese generischen Typen untereinander definieren müssen, wenn ich stark typisierte konkrete Implementierungen meiner Klassen zurückgeben möchte. Es scheint, als könnte das schnell und unhandlich werden. Ich hatte gehofft, dass da etwas fehlte. –