Číst v angličtině

Sdílet prostřednictvím


Chyba kompilátoru CS0473

Explicitní implementace rozhraní název metody odpovídá více než jednomu členu rozhraní. Který člen rozhraní je ve skutečnosti vybrán, je závislý na implementaci. Zvažte místo toho použití ne explicitní implementace.

V některých případech může obecná metoda získat stejný podpis jako ne generická metoda. Problém spočívá v tom, že v systému metadat společné jazykové infrastruktury (CLI) neexistuje způsob, jak jednoznačně uvést, která metoda je svázána s jakým slotem. Je na rozhraní příkazového řádku, aby se toto rozhodnutí rozhoduje.

Oprava této chyby

Chcete-li chybu opravit, eliminujte explicitní implementaci a implementujte obě metody rozhraní v implicitní implementaci public int TestMethod(int).

Příklad

Následující kód vygeneruje CS0473:

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;
    }
}

Viz také