Marcar explícitamente la clase derivada como interfaz de implementación de la clase base
interface IBase
{
string Name { get; }
}
class Base : IBase
{
public Base() => this.Name = "Base";
public string Name { get; }
}
class Derived : Base//, IBase
{
public Derived() => this.Name = "Derived";
public new string Name { get; }
}
class Program
{
static void Main(string[] args)
{
IBase o = new Derived();
Console.WriteLine(o.Name);
}
}
En este caso, la salida será "Base".
Si declaro explícitamente que Derived implementa IBase (que de hecho ya está implementado por la clase base Base y esa anotación parece ser inútil) la salida será "Derivada"
class Derived : Base, IBase
{
public Derived() => this.Name = "Derived";
public new string Name { get; }
}
¿Cuál es la razón de tal comportamiento?
VS 15.3.5, C # 7