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