Mam dwie klasy, klasę podstawową i klasę podrzędną. W klasie bazowej i określić ogólny sposób wirtualny:Dziwne generyczne błędy kompilacji
protected virtual ReturnType Create<T>() where T : ReturnType {}
potem w mojej klasie dzieci próbuję to zrobić:
protected override ReturnTypeChild Create<T>() // ReturnTypeChild inherits ReturnType { return base.Create<T> as ReturnTypeChild; }
Visual Studio daje ten dziwny błąd:
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'.
Powtarzanie klauzuli where na override dziecka również powoduje błąd:
Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly
Co ja tu robię źle?
Czy to powinno być "chronione zastąpić BarChild Foo()'? Czy potrafisz podać prawdziwe imiona? Foo i Bar ranią moją głowę. –
Kobi
I nie powinien to być powracający base.Foo jako BarChild() ;? –
GenericTypeTea
Twój kod ma wiele problemów (np. Twoja nadpisana metoda nie ma swojego parametru ogólnego, twoja instrukcja return ma błędy w niewłaściwym miejscu itd.). Bardziej prawdopodobne jest uzyskanie pomocnych odpowiedzi, jeśli stworzysz minimalną reprodukcję problemu, który ma naprawione wszystkie oczywiste problemy. – kvb