Tal vez estoy haciendo todo mal.C# Generics - ¿Cómo devuelvo un tipo específico?
Tengo un montón de clases que se derivan de la clase "Modelo", una clase base con un conjunto de propiedades y métodos comunes. Quiero a todos a poner en práctica un conjunto de funcionalidades:
public abstract void Create();
public abstract T Read<T>(Guid ID); //<--Focus on this one
public abstract void Update();
public abstract void Delete();
Entonces implementarla en una clase de niño como "cita" de esta manera:
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;
}
Esto arroja una excepción "No se puede convertir implícitamente escriba 'Cita' a T ". Si cambio la firma del método a "anulación pública Appointment Read (Guid ID)", el compilador dice que no he implementado el método abstracto en la clase secundaria.
¿Qué me estoy perdiendo? ¿Alguien puede darme algunas muestras de código?
Cuál es la motivación detrás de tener su método Read genérico? –
+1 Me gusta la pregunta ya que estaba tratando de hacer algo similar. Luego me di cuenta de que lo estaba haciendo mal, terminé con una solución muy similar a la de Greg. Si esta pregunta hubiera estado aquí hace 4 días, no habría pasado tanto tiempo tratando de descubrir qué estaba haciendo mal. – IAbstract
¿De qué sirve usar genéricos si no está utilizando 'T' en su método y quiere devolver' Cita '? – jason