Compartir a través de


Error del compilador CS0686

Actualización: noviembre 2007

Mensaje de error

El descriptor de acceso 'descriptor de acceso' no puede implementar el miembro de interfaz 'miembro' para el tipo 'tipo'. Utilice una implementación de interfaz explícita.
Accessor 'accessor' cannot implement interface member 'member' for type 'type'. Use an explicit interface implementation.

Sugerencia: este error se puede producir al implementar una interfaz que contiene nombres de métodos que están en conflicto con los métodos generados automáticamente y asociados a una propiedad o un evento. Los métodos get/set correspondientes a las propiedades se generan como get_propiedad y set_propiedad, y los métodos add/remove correspondientes a los eventos se generan como add_evento y remove_evento. Si una interfaz contiene cualquiera de estos métodos, se produce un conflicto. Para evitar este error, implemente los métodos mediante una implementación de interfaces explícita. Para ello, especifique la función de la siguiente manera:

Interface.get_property() { /* */ }
Interface.set_property() { /* */ }

Ejemplo

El código siguiente genera el error CS0686:

// CS0686.cs
interface I
{
    int get_P();
}

class C : I
{
    public int P
    {
        get { return 1; }  // CS0686
    }
}
// But the following is valid:
class D : I
{
    int I.get_P() { return 1; }
    public static void Main() {}
}

Este error también se puede producir al declarar los eventos. La construcción del evento genera automáticamente los métodos add_event y remove_event, que pueden estar en conflicto con los métodos del mismo nombre de una interfaz, como en el ejemplo siguiente:

// CS0686b.cs
using System;

interface I
{
    void add_OnMyEvent(EventHandler e);
}

class C : I
{
    public event EventHandler OnMyEvent
    {
        add { }  // CS0686
        remove { }
    }
}

// Correct (using explicit interface implementation):
class D : I
{
    void I.add_OnMyEvent(EventHandler e) {}
    public static void Main() {}
}