Error del compilador CS0473

Actualización: noviembre 2007

Mensaje de error

La implementación de interfaz explícita 'nombre de método' coincide con más de un miembro de interfaz. El miembro de interfaz que se elige depende de la implementación. Considere el uso de una implementación no explícita en su lugar.
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.

En algunos casos, un método genérico puede adquirir la misma firma que un método no genérico. El problema es que no existe ninguna forma en el sistema de metadatos de Common Language Infrastructure (CLI) para indicar inequívocamente qué método se enlaza a cada ranura. Corresponde a CLI realizar esa determinación.

Nota:

Este error se produce en Visual Studio 2008 en lugares donde no se producía en Visual Studio 2005.

Para corregir este error

  • Elimine la implementación explícita y haga que la implementación implícita public int TestMethod(int) implemente ambos métodos de interfaz.

Ejemplo

El código siguiente genera el error 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;
    }
}

Vea también

Otros recursos

Fabulous Adventures in Coding