Lire en anglais

Partager via


Erreur du compilateur CS0473

L’implémentation d’interface explicite 'method name' correspond à plusieurs membres d’interface. Le membre d’interface sélectionné dépend de l’implémentation. Si possible, utilisez plutôt une implémentation non explicite.

Dans certains cas, une méthode générique peut acquérir la même signature qu’une méthode non générique. Le problème est qu’il est impossible dans le système de métadonnées de l’infrastructure du langage commun (CLI) d’établir clairement quelle méthode est reliée à quel emplacement. Il appartient au CLI d’effectuer cette distinction.

Pour corriger cette erreur

Pour corriger l’erreur, éliminez l’implémentation explicite et implémentez les deux méthodes d’interface dans l’implémentation public int TestMethod(int) implicite.

Exemple

Le code suivant génère l’erreur 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;
    }
}

Voir aussi