Sobes.tech
Junior — Middle

Kuidas peaks käituma, kui klassis on deklareeritud kaks liidest, mis sisaldavad samu meetodite nimesid?

sobes.tech AI

Vastus AI-lt

Kui klass implementeerib kahte liidest, mis sisaldavad meetodeid sama nime ja signatuuriga, siis:

  • Kui meetodid omavad sama signatuuri ja tagastustüüpi, piisab ühest meetodist, mis rahuldab mõlemad liidesed.
  • Kui sama nimega meetoditel on erinevad signatuurid (näiteks erinevad parameetrid), siis tuleb implementida mõlemad meetodid eraldi.
  • Kui liideste meetodid on sama nime ja signatuuriga, kuid erineva vaikimisi (default) implementatsiooniga, siis tuleb klassis see meetod selgelt üle kirjutada ja näidata, millist implementatsiooni kasutada, või pakkuda oma.

Näide default meetodite konfliktist:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Selgelt valime implementatsiooni
        ((IFirst)this).Method();
        // või oma
        Console.WriteLine("MyClass Method");
    }
}

Seega, kui erinevatest liidestest pärinevate meetodite nimed kattuvad C#-s, peab klass selgelt lahendama ebakindluse, implementeerides meetodi ise.