Compilerfehler CS0473

Die explizite Schnittstellenimplementierung 'methodenname' stimmt mit mehreren Schnittstellenmembern überein Welches Schnittstellenmember tatsächlich ausgewählt wird, hängt von der Implementierung ab. Erwägen Sie stattdessen die Verwendung einer nicht expliziten Implementierung.

In manchen Fällen kann eine generische Methode die gleiche Signatur erhalten wie eine nicht generische Methode. Das Problem liegt darin, dass das Metadatensystem der Common Language Infrastructure (CLI) keine Möglichkeit bietet, eindeutig festzustellen, welche Methode an welchen Slot gebunden ist. Diese Entscheidung muss von der CLI getroffen werden.

So beheben Sie diesen Fehler

Um den Fehler zu beheben, entfernen Sie die explizite Implementierung, und implementieren Sie beide Schnittstellenmethoden in der impliziten Implementierung public int TestMethod(int).

Beispiel

Mit dem folgenden Code wird CS0473 generiert:

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

Siehe auch