Sobes.tech
Junior — Middle

Jak należy postępować, jeśli w klasie zadeklarowano dwa interfejsy zawierające metody o tych samych nazwach?

sobes.tech AI

Odpowiedź od AI

Jeśli w klasie implementowane są dwie interfejsy zawierające metody o tych samych nazwach i sygnaturach, to:

  • Jeśli metody mają tę samą sygnaturę i typ zwracany, wystarczy zaimplementować jedną metodę, która spełni oba interfejsy.
  • Jeśli metody o tych samych nazwach mają różne sygnatury (np. różne parametry), konieczne jest zaimplementowanie obu metod osobno.
  • Jeśli interfejsy zawierają metody o tych samych nazwach i sygnaturach, ale z różnymi domyślnymi implementacjami (default methods), to w klasie należy jawnie nadpisać tę metodę i wskazać, której implementacji użyć, lub dostarczyć własną.

Przykład z konfliktem metod default:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Wyraźnie wybieramy implementację
        ((IFirst)this).Method();
        // lub własną
        Console.WriteLine("MyClass Method");
    }
}

W związku z tym, w przypadku konfliktu nazw metod z różnych interfejsów w C#, klasa musi jawnie rozwiązać niejednoznaczność, implementując metodę samodzielnie.