Soy básicamente querer hacer esto:¿Cómo heredar de un parámetro genérico?
class UILockable<T> : T
where T : UIWidget
{
}
Sin embargo, esto no funciona. He visto gente recomienda que haga esto:
class UILockable<T>
where T : UIWidget
{
private T _base;
}
Esto me requeriría para anular cada función UILockable necesitaría y lo remitirá a T. Esto es imposible ya que T puede derivar de UIWidget y tienen Único/virtuales métodos propios.
¿No hay forma de simplemente heredar de T?
Considere forzar el tipo genérico para implementar una interfaz específica. No puede saber qué tipo exacto es T, y si está buscando métodos específicos que cualquier T pueda o no tenga, no va a funcionar. Haga que todos esos objetos implementen ILockable que fuerza esos métodos, como un contrato. – drharris
Si no necesita reemplazar los métodos protegidos para lograr su lógica de bloqueo, puede rediseñar esto utilizando un objeto de servicio de bloqueo que asocie instancias de UIWidget con objetos LockContext utilizados para su lógica de bloqueo. No creo que la herencia sea una buena forma conceptual para lo que estás tratando de hacer, ya que estás tratando de aumentar la funcionalidad en general, no expresar una relación concreta 'es-a'. –
posible duplicado de [Herencia en un parámetro de tipo genérico restringido] (http://stackoverflow.com/questions/1420581/inheritance-on-a-constrained-generic-type-parameter) – joce