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.