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

questionAnswers(2)

yourAnswerToTheQuestion