Erreur du compilateur CS0473
Mise à jour : novembre 2007
Message d'erreur
L'implémentation d'interface explicite 'nom de méthode' 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.
Explicit interface implementation 'method name' matches more than one interface member. Which interface member is actually chosen is implementation-dependent. Consider using a non-explicit implementation instead.
Dans certains case, 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.
Remarque : |
---|
Cette erreur est générée dans Visual Studio 2008 à des emplacements auxquels elle ne l'était pas dans Visual Studio 2005. |
Pour corriger cette erreur
- Supprimez l'implémentation explicite et laissez l'implémentation implicite public int TestMethod(int) implémenter les deux méthodes d'interface.
Exemple
Le code suivant génère l'erreur CS0473 :
// cs0473.cs
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;
}
}