Ler em inglês

Compartilhar via


Erro do Compilador CS0473

O "method name" da implementação explícita da interface corresponde a mais de um membro da interface. O membro da interface realmente escolhido depende da implementação. Considere usar uma implementação não explícita.

Em alguns casos, um método genérico pode adquirir a mesma assinatura que um método não genérico. O problema é que não há nenhuma forma no sistema de metadados da CLI (Common Language Infrastructure) de declarar de maneira inequívoca qual método se associa a qual slot. Cabe à CLI fazer essa determinação.

Para corrigir este erro

Para corrigir o erro, elimine a implementação explícita e implemente ambos os métodos de interface na implementação implícita public int TestMethod(int).

Exemplo

O seguinte código gera o erro CS0473:

C#
public interface ITest<T>
{
    int TestMethod(int i);
    int TestMethod(T i);
}

public class ImplementingClass : ITest<int>
{
    int ITest<int>.TestMethod(int i) // CS0473
    {
        return i + 1;
    }

    public int TestMethod(int i)
    {
        return i - 1;
    }
}

class T
{
    static int Main()
    {
        ImplementingClass a = new ImplementingClass();
        if (a.TestMethod(0) != -1)
            return -1;

        ITest<int> i_a = a;
        System.Console.WriteLine(i_a.TestMethod(0).ToString());
        if (i_a.TestMethod(0) != 1)
            return -1;

        return 0;
    }
}

Confira também