Sobes.tech
Junior — Middle

Come si dovrebbe procedere se in una classe sono dichiarate due interfacce contenenti metodi con gli stessi nomi?

sobes.tech AI

Risposta dell'AI

Se in una classe vengono implementate due interfacce che contengono metodi con gli stessi nomi e firme, allora:

  • Se i metodi hanno la stessa firma e lo stesso tipo di ritorno, basta implementare un metodo che soddisfi entrambi.
  • Se i metodi con gli stessi nomi hanno firme diverse (ad esempio, parametri diversi), allora è necessario implementare entrambi i metodi separatamente.
  • Se le interfacce contengono metodi con gli stessi nomi e firme, ma con implementazioni di default diverse, allora nella classe è necessario sovrascrivere esplicitamente quel metodo e indicare quale implementazione usare, o fornire una propria.

Esempio con conflitto di metodi default:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Scegliere esplicitamente l’implementazione
        ((IFirst)this).Method();
        // o la propria implementazione
        Console.WriteLine("MyClass Method");
    }
}

Pertanto, in caso di conflitto di nomi di metodi provenienti da interfacce diverse in C#, la classe deve risolvere esplicitamente l’ambiguità implementando il metodo da sola.