Sobes.tech
Junior — Middle

Hoe moet je handelen als in een klas twee interfaces zijn gedeclareerd die dezelfde methodenamen bevatten?

sobes.tech AI

Antwoord van AI

Als een klasse twee interfaces implementeert die methoden met dezelfde namen en handtekeningen bevatten, dan:

  • Als de methoden dezelfde handtekening en hetzelfde retourtype hebben, volstaat het om één methode te implementeren die aan beide interfaces voldoet.
  • Als de methoden met dezelfde namen verschillende handtekeningen hebben (bijvoorbeeld verschillende parameters), dan moeten beide methoden afzonderlijk worden geïmplementeerd.
  • Als de interfaces methoden met dezelfde namen en handtekeningen bevatten, maar met verschillende standaardimplementaties (default methods), dan moet de klasse deze methode expliciet overschrijven en aangeven welke implementatie gebruikt moet worden, of een eigen implementatie bieden.

Voorbeeld met conflict van default methods:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Expliciet kiezen van de implementatie
        ((IFirst)this).Method();
        // of eigen implementatie
        Console.WriteLine("MyClass Method");
    }
}

Dus, bij conflicten met methoden met dezelfde naam uit verschillende interfaces in C#, moet de klasse expliciet de ambiguïteit oplossen door de methode zelf te implementeren.