Sobes.tech
Junior — Middle

Como deve proceder-se se numa aula forem declarados dois interfaces contendo métodos com nomes iguais?

sobes.tech IA

Resposta da IA

Se numa classe forem implementadas duas interfaces que contêm métodos com os mesmos nomes e assinaturas, então:

  • Se os métodos tiverem a mesma assinatura e tipo de retorno, basta implementar um método que satisfaça ambos.
  • Se os métodos com os mesmos nomes tiverem assinaturas diferentes (por exemplo, parâmetros diferentes), então é necessário implementar ambos os métodos separadamente.
  • Se as interfaces contiverem métodos com os mesmos nomes e assinaturas, mas com implementações padrão diferentes (default methods), então na classe é necessário sobrescrever explicitamente esse método e indicar qual implementação usar, ou fornecer a sua própria.

Exemplo com conflito de métodos default:

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

class MyClass : IFirst, ISecond {
    public void Method() {
        // Escolher explicitamente a implementação
        ((IFirst)this).Method();
        // ou a sua própria implementação
        Console.WriteLine("MyClass Method");
    }
}

Assim, em caso de conflito de nomes de métodos de interfaces diferentes em C#, a classe deve resolver explicitamente a ambiguidade implementando o método por si própria.