Lezen in het Engels

Delen via


Compilerfout CS0473

Expliciete interface-implementatie 'methodenaam' komt overeen met meer dan één interfacelid. Welk interfacelid daadwerkelijk wordt gekozen, is afhankelijk van de implementatie. Overweeg in plaats daarvan een niet-expliciete implementatie te gebruiken.

In sommige gevallen kan een algemene methode dezelfde handtekening verkrijgen als een niet-algemene methode. Het probleem is dat er geen manier is in het common Language Infrastructure (CLI)-metagegevenssysteem om ondubbelzinnig te bepalen welke methode aan welke site wordt gekoppeld. Het is aan de CLI om die beslissing te nemen.

Deze fout corrigeren

Als u de fout wilt corrigeren, elimineert u de expliciete implementatie en implementeert u beide interfacemethoden in de impliciete implementatie public int TestMethod(int).

Opmerking

Met de volgende code wordt CS0473 gegenereerd:

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

Zie ook