Junior — Middle
Ako by ste mali postupovať, ak v triede sú deklarované dve rozhrania obsahujúce rovnaké názvy metód?
sobes.tech AI
Odpoveď od AI
Ak v triede implementujete dve rozhrania obsahujúce metódy so rovnakými názvami a podpismi, potom:
- Ak majú metódy rovnakú podpis a rovnaký typ návratu, postačuje implementovať jednu metódu, ktorá bude vyhovovať obom rozhraniam.
- Ak majú metódy s rovnakými názvami odlišné podpisy (napríklad, rôzne parametre), je potrebné implementovať obe metódy samostatne.
- Ak rozhrania obsahujú metódy s rovnakými názvami a podpismi, ale s rôznymi predvolenými (default) implementáciami, je v triede potrebné explicitne prepísať túto metódu a uviesť, ktorú implementáciu použiť, alebo poskytnúť vlastnú.
Príklad s konfliktom default metód:
interface IFirst {
void Method() => Console.WriteLine("First");
}
interface ISecond {
void Method() => Console.WriteLine("Second");
}
class MyClass : IFirst, ISecond {
public void Method() {
// Jasne vyberáme implementáciu
((IFirst)this).Method();
// alebo vlastnú implementáciu
Console.WriteLine("MyClass Method");
}
}
Preto, pri konflikte mien metód z rôznych rozhraní v C#, trieda musí explicitne vyriešiť nejasnosť implementáciou metódy sama.