Vielleicht mache ich das alles falsch.C# Generika - Wie gebe ich einen bestimmten Typ zurück?
Ich habe eine Reihe von Klassen, die von der "Model" -Klasse, eine Basisklasse mit einer Reihe von gemeinsamen Eigenschaften und Methoden ableiten. Ich möchte, dass sie alle eine Reihe von Funktionen implementieren:
public abstract void Create();
public abstract T Read<T>(Guid ID); //<--Focus on this one
public abstract void Update();
public abstract void Delete();
ich es dann umzusetzen in einer Kindklasse wie „Termin“ in etwa so:
public override T Read<T>(Guid ID)
{
var appt = db.Appointments.First(a => a.AppointmentID.Equals(ID));
var appointment = new Appointment()
{
DateEnd = appt.dateEnd.GetValueOrDefault(),
Location = appt.location,
Summary = appt.summary
};
return appointment;
}
Diese eine Ausnahme „Kann nicht implizit wirft konvertieren Geben Sie "Termin" bis "T" ein. Wenn ich die Signatur der Methode in "public override Appointment Read (Guid ID)" ändere, sagt der Compiler, dass ich die abstrakte Methode in der Kindklasse nicht implementiert habe.
Was fehlt mir? Kann mir jemand ein paar Codebeispiele geben?
Was ist die Motivation hinter mit Ihrer Read-Methode generisch? –
+1 Ich mag die Frage, als ich versuchte, etwas ähnliches zu tun. Dann erkannte ich, dass ich es falsch gemacht hatte - endete mit einer Lösung, die Greg sehr ähnlich war. Wenn diese Frage vor 4 Tagen hier gewesen wäre, hätte ich nicht so viel Zeit damit verbracht, herauszufinden, was ich falsch mache. – IAbstract
Was ist der Sinn der Verwendung von Generika, wenn Sie in Ihrer Methode überhaupt nicht 'T' verwenden und einen' Termin' zurückgeben wollen? – jason