usando tipos tipo ser referencia genericos genericas debe clases c# .net generics inheritance interface

c# - ser - tipos de genericos



¿Por qué una clase genérica que implementa una interfaz genérica con restricciones de tipo necesita repetir estas restricciones? (1)

La clase no necesita repetir estas restricciones, necesita proporcionar un tipo que satisfaga las restricciones de la interfaz. Hay varias formas de hacerlo:

  • Puede suministrar un tipo específico que satisfaga las restricciones, o
  • Puede colocar sus propias restricciones en un tipo genérico que sea más fuerte de lo que espera la interfaz, o
  • Puede repetir las restricciones desde la interfaz.

La clave es que T en InterfaceImpl<T> pertenece a InterfaceImpl , por lo que cualquier restricción que se coloque en T debe ser propia de InterfaceImpl .

Digamos que tengo una siguiente interfaz de C #:

public interface IInterface<T> where T : SomeClass { void InterfaceMethod(); }

Y SomeClass se define de la siguiente manera:

public class SomeClass { public void SomeMethod(); }

Ahora me gustaría definir la implementación de la interfaz, que no se compilará:

public class InterfaceImpl<T> : IInterface<T> { public void InterfaceMethod() { T test = default(T); test.SomeMethod(); //Gives Error } }

antes de cambiarlo a:

public class InterfaceImpl<T> : IInterface<T> where T : SomeClass { public void InterfaceMethod() { T test = default(T); test.SomeMethod(); //Compiles fine } }

¿No tendría sentido que las restricciones de tipo también sean "heredadas" (no es la palabra correcta, lo sé) de la interfaz?