Ho due classi, una classe base e una classe figlio. Nella classe base definisco un metodo virtuale generico:Generici bizzarici errore di compilazione
protected virtual ReturnType Create<T>() where T : ReturnType {}
Poi nella mia classe figlio cerco di fare questo:
protected override ReturnTypeChild Create<T>() // ReturnTypeChild inherits ReturnType { return base.Create<T> as ReturnTypeChild; }
studio visivo dà questo strano errore:
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'.
La ripetizione della clausola where sull'override del bambino restituisce anche un errore:
Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly
Quindi cosa sto facendo di sbagliato qui?
Se questo deve essere 'protetto override BarChild Foo()'? Puoi dare nomi propri? Foo e Bar mi fanno male alla testa. –
Kobi
E non dovrebbe essere la base di ritorno.Fai come BarChild() ;? –
GenericTypeTea
Il tuo codice ha tutti i tipi di problemi (ad esempio, il metodo sottoposto a override manca del suo parametro generico, la tua dichiarazione di ritorno ha parentesi nel posto sbagliato, ecc.). È più probabile che tu ottenga risposte utili se crei una riproduzione minima del tuo problema che risolva tutti i problemi ovvi. – kvb