Когда нам нужно повторно наследовать от интерфейса, который был реализован классом, от которого мы наследуем?
Совершенно верно сделать это, а затем явно реализуйте IFoo
в Program
, чтобы иметь другую реализацию.
Пример:
using System;
interface IFoo
{
void Any();
}
class Foo : IFoo
{
public void Any() => Console.WriteLine("Foo");
}
class Program : Foo, IFoo
{
static void Main()
{
IFoo ifoo = new Program();
ifoo.Any();
Foo foo = new Program();
foo.Any();
Program program = new Program();
program.Any();
}
void IFoo.Any() => Console.WriteLine("Program");
}
Это выдаст:
Program
Foo
Foo
Конечно, это необычно и редко используется. Но это один из примеров того, почему компилятору может быть разрешено классу эффективно переопределять реализацию интерфейса.