Compilerfehler CS0686

Aktualisiert: November 2007

Fehlermeldung

Der "Accessor"-Accessor kann den Schnittstellenmember "Member" für Typ "Typ" nicht implementieren. Verwenden Sie eine explizite Schnittstellenimplementierung.
Accessor 'accessor' cannot implement interface member 'member' for type 'type'. Use an explicit interface implementation.

Empfohlen: Dieser Fehler kann beim Implementieren einer Schnittstelle auftreten, die Methodennamen enthält, die im Konflikt mit den automatisch generierten Methoden stehen, die mit einer Eigenschaft oder einem Ereignis verknüpft sind. Die get/set-Methoden für Eigenschaften werden als get_property und set_property generiert, und die Methoden zum Hinzufügen/Entfernen von Ereignisse werden als add_event und remove_event generiert. Wenn eine Schnittstelle beide Methoden enthält, tritt ein Konflikt auf. Um diesen Fehler zu vermeiden, implementieren Sie die Methoden mit einer expliziten Schnittstellenimplementierung. Geben Sie dazu die Funktion wie folgt an:

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

Beispiel

Im folgenden Beispiel wird CS0686 generiert:

// 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() {}
}

Dieser Fehler kann auch beim Deklarieren von Ereignissen auftreten. Das Ereigniskonstrukt generiert die Methoden add_event und remove_event automatisch. Das kann zu einem Konflikt mit den gleichnamigen Methoden in einer Schnittstelle führen, wie im folgenden Beispiel dargestellt:

// 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() {}
}