Tengo una subclase con un método omitido que sé que siempre devuelve un subtipo particular del tipo de devolución declarado en la clase base. Si escribo el código de esta manera, no se compilará. Como eso probablemente no tiene sentido, déjeme dar un ejemplo de código:Cómo devolver el subtipo en el método reemplazado de la subclase en 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();
}
}
¿Hay alguna manera de lograr esto en C#? Si no, ¿cuál es la mejor manera de lograr algo similar? ¿Y por qué no está permitido? No parece permitir ninguna incoherencia lógica, ya que cualquier objeto devuelto por el método over-ridden aún is BaseReturnType
. Tal vez hay algo que no había considerado sin embargo. O tal vez la razón sea tecnológica o histórica.
¿Qué dice el recopilador? –
He incluido el error del compilador como comentario. – recursive