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);
}
}
В этом случае вывод будет "Base".
Если я явно укажу, что Derived реализует IBase (который на самом деле уже реализован базовым классом Base, и такая аннотация кажется бесполезной), выход будет "Derived"
class Derived : Base, IBase
{
public Derived() => this.Name = "Derived";
public new string Name { get; }
}
Какова причина такого поведения?
VS 15.3.5, С# 7