Sobes.tech
Junior — Middle

Kako treba postupiti ako u klasi postoje dva interfejsa koja sadrže iste nazive metoda?

sobes.tech АИ

Одговор од АИ

Ako u klasi implementirate dva interfejsa koji sadrže metode sa istim imenima i potpisima, onda:

  • Ako metode imaju isti potpis i isti tip povratne vrednosti, dovoljno je implementirati jednu metodu koja će zadovoljiti oba interfejsa.
  • Ako metode sa istim imenima imaju različite potpise (na primer, različite parametre), potrebno je implementirati obe metode odvojeno.
  • Ako interfejsi sadrže metode sa istim imenima i potpisima, ali sa različitim podrazumevanim (default) implementacijama, onda je u klasi potrebno eksplicitno prepisati tu metodu i navesti koju implementaciju koristiti, ili pružiti svoju.

Primer sa konfliktom default metoda:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Jasno biramo implementaciju
        ((IFirst)this).Method();
        // ili svoju implementaciju
        Console.WriteLine("MyClass Method");
    }
}

Dakle, u slučaju konflikta imena metoda iz različitih interfejsa u C#, klasa mora eksplicitno da reši nejasnoću implementacijom metode sama.