Один класс может реализовывать любое количество интерфейсов, даже если эти интерфейсы расширяют и другие интерфейсы.Множественное наследование невозможно только с классами .
// This is not allowed
class A { void A() {} }
class B { void B() {} }
class C : A, B {}
// This is allowed
interface IA { void A(); }
interface IB { void B(); }
class A : IA, IB
{
public void A() {}
public void B() {}
}
Проблема с алмазом существует в классах, поскольку существует возможность конфликтующих реализаций (если A
иB
имеет один и тот же метод, а C
расширяет оба, какой метод он использует?).Интерфейсы, с другой стороны, просто требуют, чтобы реализующий тип имел методы, которые они объявляют.
Если в двух интерфейсах определен один и тот же метод, и класс реализует оба интерфейса, это не имеет значения.Все, что нужно сделать классу - это обеспечить реализацию метода, чтобы можно было написать код для вызова этого метода.Это означает, что это работает:
interface IA { void Method(int x); }
interface IB { void Method(int x); }
class A : IA, IB
{
public void Method(int x)
{
Console.WriteLine(x);
}
}
Обратите внимание, что класс все еще может наследовать от одного другого класса, плюс любое количество интерфейсов:
class A : B, IA, IB {}