Compilerfehler CS0686

Der "Accessor"-Accessor kann den Schnittstellenmember "Member" für Typ "Typ" nicht implementieren.Verwenden Sie eine explizite Schnittstellenimplementierung.

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