Peut-être que je vais à ce sujet tout faux.C# Generics - Comment retourner un type spécifique?
J'ai un tas de classes qui dérivent de la classe "Model", une classe de base avec un tas de propriétés et de méthodes communes. Je veux tous à mettre en œuvre un ensemble de fonctionnalités:
public abstract void Create();
public abstract T Read<T>(Guid ID); //<--Focus on this one
public abstract void Update();
public abstract void Delete();
Puis je mettre en œuvre dans une classe d'enfants comme « Rendez-vous » comme ceci:
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;
}
Cela jette une exception « peut pas convertir implicitement tapez "rendez-vous" à T ". Si je change la signature de la méthode en "public override Appointment Read (Guid ID)", le compilateur dit que je n'ai pas implémenté la méthode abstraite dans la classe enfant.
Qu'est-ce qui me manque? Quelqu'un peut-il me donner des échantillons de code?
Quelle est la motivation derrière avoir votre méthode Read générique? –
+1 J'aime la question car j'essayais de faire quelque chose de similaire. Puis réalisé que je le faisais mal - fini avec une solution très similaire à celle de Greg. Si cette question avait été posée il y a 4 jours, je n'aurais pas passé autant de temps à essayer de comprendre ce que je faisais de mal. – IAbstract
À quoi bon utiliser des génériques si vous n'utilisez pas du tout T dans votre méthode et si vous voulez retourner un rendez-vous? – jason