Ho una sottoclasse con un metodo over-ridden che so sempre restituisce un sottotipo particolare del tipo restituito dichiarato nella classe base. Se scrivo il codice in questo modo, non verrà compilato. Dal momento che, probabilmente, non ha senso, mi permetta di dare un esempio di codice:Come restituire il sottotipo nel metodo sovrascritto della sottoclasse in C#?
class BaseReturnType { }
class DerivedReturnType : BaseReturnType { }
abstract class BaseClass {
public abstract BaseReturnType PolymorphicMethod();
}
class DerivedClass : BaseClass {
// Compile Error: return type must be 'BaseReturnType' to match
// overridden member 'BaseClass.PolymorphicMethod()'
public override DerivedReturnType PolymorphicMethod() {
return new DerivedReturnType();
}
}
Esiste un modo per raggiungere questo obiettivo in C#? In caso contrario, qual è il modo migliore per ottenere qualcosa di simile? E perché non è permesso? Non sembra consentire alcuna incoerenza logica, dal momento che qualsiasi oggetto restituito dal metodo sovrascritto è ancora is BaseReturnType
. Forse c'è qualcosa che non avevo considerato però. O forse la ragione è tecnologica o storica.
Cosa dice il compilatore? –
Ho incluso l'errore del compilatore come commento. – recursive