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# класс обязан явно разрешить неоднозначность, реализовав метод самостоятельно.