Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

Ако в клас се реализират два интерфейса, съдържащи методи с еднакви имена и сигнатури, тогава:

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

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