Sobes.tech
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.