Tengo algunos problemas de herencia ya que tengo un grupo de clases abstractas interrelacionadas que deben ser reemplazadas todas juntas para crear una implementación de cliente. Idealmente me gustaría hacer algo como lo siguiente:¿Por qué la herencia no funciona como creo que debería funcionar?
abstract class Animal
{
public Leg GetLeg() {...}
}
abstract class Leg { }
class Dog : Animal
{
public override DogLeg Leg() {...}
}
class DogLeg : Leg { }
Esto permitiría que cualquier persona que utilice la clase de perro para obtener automáticamente curvas cerradas y cualquier persona que utilice la clase de animales para obtener las piernas. El problema es que la función reemplazada debe tener el mismo tipo que la clase base, por lo que no se compilará. Sin embargo, no veo por qué no debería hacerlo, ya que DogLeg es moldeable implícitamente para Leg. Sé que hay muchas formas de evitar esto, pero tengo más curiosidad sobre por qué esto no es posible/implementado en C#.
EDIT: He modificado esto un tanto, ya que estoy usando propiedades en lugar de funciones en mi código.
EDITAR: He cambiado de nuevo a las funciones, porque la respuesta sólo se aplica a esa situación (covarianza en el parámetro de valor de la función set de una propiedad no trabajo debería). Perdón por las fluctuaciones! Me doy cuenta de que hace que muchas de las respuestas parezcan irrelevantes.
Su afirmación sobre la varianza no tiene sentido. En un subtipo: Covarianza = el tipo relacionado que se subtipo y Contravariancia = tipo relacionado que se superó. Esta pregunta representa un tipo de retorno covariante (subtipo utilizado en un subtipo), cuando C# solo permite un tipo de retorno invariante (el mismo). –
Los artículos a los que se vinculó se refieren a la varianza de tipo genérico. La pregunta es sobre la covarianza del tipo de retorno. Declaro explícitamente en esos artículos que '* no * estoy hablando sobre la covarianza del tipo de retorno. –
Eric Lippert: Pero esas cosas están intrínsecamente conectadas. Vea aquí: http://apocalisp.wordpress.com/2009/08/27/hostility-toward-subtyping/ – Apocalisp