Sobes.tech
Junior — Middle

Hogyan kell eljárni, ha az osztályban két interfész van deklarálva, amelyek ugyanazokat a metódusneveket tartalmazzák?

sobes.tech MI

Válasz az MI-től

Ha egy osztály két olyan interfészt valósít meg, amelyek ugyanazokat a nevű és aláírású metódusokat tartalmaznak, akkor:

  • Ha a metódusok ugyanazt az aláírást és visszatérési típust használják, elegendő egy olyan metódust megvalósítani, amely mindkét interfészt kielégíti.
  • Ha ugyanazok a nevű metódusok különböző aláírással rendelkeznek (például különböző paraméterekkel), akkor mindkét metódust külön kell megvalósítani.
  • Ha az interfészek ugyanazokat a nevű és aláírású metódusokat tartalmaznak, de különböző alapértelmezett (default) implementációkkal, akkor a osztályban ezeket a metódusokat explicit módon felül kell írni, és meg kell határozni, melyik implementációt használja, vagy sajátot kell biztosítani.

Példa default metódus konfliktusra:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Egyértelműen kiválasztjuk az implementációt
        ((IFirst)this).Method();
        // vagy saját implementáció
        Console.WriteLine("MyClass Method");
    }
}

Ezért, ha különböző interfészekből származó ugyanazt a nevet viselő metódusok ütköznek C#-ban, akkor a osztálynak explicit módon kell megoldania az ambiguïtást, és saját maga kell implementálnia a metódust.