Junior — Middle
Cum trebuie să procedezi dacă în clasă sunt declarate două interfețe care conțin metode cu aceleași nume?
sobes.tech AI
Răspuns de la AI
Dacă într-o clasă sunt implementate două interfețe care conțin metode cu aceleași nume și semnături, atunci:
- Dacă metodele au aceeași semnătură și același tip de retur, este suficient să implementați o singură metodă care să satisfacă ambele interfețe.
- Dacă metodele cu aceleași nume au semnături diferite (de exemplu, parametri diferiți), atunci trebuie să implementați ambele metode separat.
- Dacă interfețele conțin metode cu aceleași nume și semnături, dar cu implementări implicite diferite (default methods), atunci în clasă trebuie să suprascrieți explicit această metodă și să indicați ce implementare să folosiți, sau să furnizați propria.
Exemplu cu conflict de metode default:
interface IFirst {
void Method() => Console.WriteLine("First");
}
interface ISecond {
void Method() => Console.WriteLine("Second");
}
class MyClass : IFirst, ISecond {
public void Method() {
// Alegem explicit implementarea
((IFirst)this).Method();
// sau propria implementare
Console.WriteLine("MyClass Method");
}
}
Prin urmare, în cazul conflictului de nume de metode din diferite interfețe în C#, clasa trebuie să rezolve explicit ambiguitatea implementând metoda singură.