Tengo dos clases, una clase base y una clase secundaria. En la clase base que definen un método virtual genérica:Error raro de compilación de genéricos
protected virtual ReturnType Create<T>() where T : ReturnType {}
Luego, en mi clase de niño que trato de hacer esto:
protected override ReturnTypeChild Create<T>() // ReturnTypeChild inherits ReturnType { return base.Create<T> as ReturnTypeChild; }
Visual Studio le da a este extraño error:
The type 'T' cannot be used as type parameter 'T' in the generic type or method 'Create()'. There is no boxing conversion or type parameter conversion from 'T' to 'ReturnType'.
Repetir la cláusula where en la anulación del hijo también da un error:
Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly
Entonces, ¿qué estoy haciendo mal aquí?
¿Debería ser 'protegido anular BarChild Foo()'? ¿Puedes dar nombres propios? Foo y Bar me lastimaron la cabeza. –
Kobi
¿Y no debería ser base de devolución.Foo como BarChild() ;? –
GenericTypeTea
Su código tiene todo tipo de problemas (por ejemplo, su método reemplazado le falta su parámetro genérico, su declaración de retorno tiene parens en el lugar equivocado, etc.). Es más probable que obtenga respuestas útiles si crea una reproducción mínima de su problema que tenga solucionados todos los problemas obvios. – kvb