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.