Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Błąd kompilatora CS0473

Implementacja jawnego interfejsu "nazwa metody" pasuje do więcej niż jednego elementu członkowskiego interfejsu. Wybrany element członkowski interfejsu jest zależny od implementacji. Rozważ użycie implementacji niezwiązanej z jawną implementacją.

W niektórych przypadkach metoda ogólna może uzyskać ten sam podpis co metoda niegeneryczna. Problem polega na tym, że w systemie metadanych infrastruktury języka wspólnego (CLI) nie ma możliwości jednoznacznego stanu, który metoda wiąże się z którym miejscem. To do interfejsu wiersza polecenia należy dokonać tej determinacji.

Aby poprawić ten błąd

Aby poprawić błąd, należy wyeliminować jawną implementację i zaimplementować obie metody interfejsu w niejawnej implementacji public int TestMethod(int).

Przykład

Poniższy kod generuje 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;
    }
}

Zobacz też