Si una interfaz especifica una propiedad o método para devolver otra interfaz, ¿por qué no se permite que las implementaciones de la primera interfaz "cambien" el tipo de devolución a un tipo más específico?¿Por qué una implementación de interfaz no puede devolver un tipo más específico?
Tomemos un ejemplo para ilustrar:
interface IFoo
{
IBar GetBar();
}
interface IBar
{ }
class Foo : IFoo
{
// This is illegal, we are not implementing IFoo properly
public Bar GetBar()
{
return new Bar();
}
}
class Bar : IBar
{ }
sé cómo hacer que funcione, eso es no mi preocupación.
puedo simplemente ya sea:
- Cambiar el tipo de retorno de
GetFoo()
-IBar
o - explícitamente implementar la interfaz y simplemente llamar
GetBar
delIFoo.GetBar()
método
lo que realmente estoy preguntando es el razonamiento para no solo permitir que compile el código anterior. ¿Hay algún caso en el que lo anterior no cumpla con el contrato especificado por IFoo
?
Hay una tercera forma, que es ligeramente más conveniente que las dos anteriores. Puede implementar la interfaz con una clase abstracta. Y luego, en tu clase "concreta", heredas la clase abstracta en lugar de la interfaz. Luego, en su clase "concreta", puede ocultar los métodos básicos con la palabra clave "nueva". Está funcionando decentemente para mí. – BrainSlugs83
Siento que el comentario de BrainSlugs83 aquí es una respuesta, ya que proporciona una solución decente. –