Sobes.tech
Junior — Middle

Jak byste měli postupovat, pokud ve třídě jsou deklarovány dvě rozhraní obsahující stejné názvy metod?

sobes.tech AI

Odpověď od AI

Pokud ve třídě implementujete dvě rozhraní obsahující metody se stejnými názvy a signaturami, pak:

  • Pokud mají metody stejnou signaturu a stejný návratový typ, stačí implementovat jednu metodu, která bude vyhovovat oběma rozhraním.
  • Pokud mají metody se stejnými názvy odlišné signatury (například různé parametry), je nutné implementovat obě metody samostatně.
  • Pokud rozhraní obsahují metody se stejnými názvy a signaturami, ale s různými výchozími (default) implementacemi, je v třídě nutné tyto metody explicitně přepsat a určit, kterou implementaci použít, nebo poskytnout vlastní.

Příklad s konfliktem default metod:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Explicitně volíme implementaci
        ((IFirst)this).Method();
        // nebo vlastní implementaci
        Console.WriteLine("MyClass Method");
    }
}

Proto musí třída při konfliktu jmen metod z různých rozhraní v C# explicitně vyřešit nejednoznačnost implementací metody sama.