Marcando explicitamente a classe derivada como interface de implementação da classe 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);
}
}
Nesse caso, a saída será "Base".
Se eu declarar explicitamente que o Derived implementa o IBase (que já é implementado pela classe base Base e essa anotação parece inútil), a saída será "Derived"
class Derived : Base, IBase
{
public Derived() => this.Name = "Derived";
public new string Name { get; }
}
Qual o motivo desse comportamento?
VS 15.3.5, C # 7