Compilerfehler CS0686

Die Accessor „Accessor“ kann den Schnittstellenmember „Member“ für den 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 und 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 1

Im folgenden Beispiel wird der Fehler 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() {}  
}  

Beispiel 2

Dieser Fehler kann auch beim Deklarieren von Ereignisse 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() {}  
}