Sobes.tech
Back to questions
Junior — Middle
70

Как следует поступать, если в классе объявлены два интерфейса, содержащих одинаковые имена методов?

Answer from AI

sobes.tech AI

Если в классе реализуются два интерфейса, содержащих методы с одинаковыми именами и сигнатурами, то:

  • Если методы имеют одинаковую сигнатуру и возвращаемый тип, достаточно реализовать один метод, который будет удовлетворять оба интерфейса.
  • Если методы с одинаковыми именами имеют разную сигнатуру (например, разные параметры), то нужно реализовать оба метода отдельно.
  • Если интерфейсы содержат методы с одинаковыми именами и сигнатурами, но с разной реализацией по умолчанию (default methods), то в классе необходимо явно переопределить этот метод и указать, какую реализацию использовать, или предоставить свою.

Пример с конфликтом default методов:

interface IFirst {
    void Method() => Console.WriteLine("First");
}
interface ISecond {
    void Method() => Console.WriteLine("Second");
}

class MyClass : IFirst, ISecond {
    public void Method() {
        // Явно выбираем реализацию
        ((IFirst)this).Method();
        // или своя реализация
        Console.WriteLine("MyClass Method");
    }
}

Таким образом, при конфликте имен методов из разных интерфейсов в C# класс обязан явно разрешить неоднозначность, реализовав метод самостоятельно.