Erreur du compilateur CS0686

L’accesseur 'accessor' ne peut pas implémenter le membre d’interface 'member' pour le type 'type'. Utilisez une implémentation d’interface explicite.

Suggestion : cette erreur peut se produire lors de l’implémentation d’une interface qui contient des noms de méthodes en conflit avec les méthodes générées automatiquement et associées à une propriété ou à un événement. Les méthodes get/set des propriétés sont générées sous la forme get_property et set_property, et les méthodes add/remove des événements sont générées sous la forme add_event et remove_event. Si une interface contient l’une ou l’autre de ces méthodes, un conflit se produit. Pour éviter cette erreur, implémentez les méthodes à l’aide d’une implémentation d’interface explicite. Pour ce faire, spécifiez la fonction comme suit :

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

Exemple 1

L’exemple suivant génère l’erreur 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() {}  
}  

Exemple 2

Cette erreur peut également se produire quand vous déclarez des événements. La construction d’événements génère automatiquement les méthodes add_event et remove_event, qui sont susceptibles d’être en conflit avec les méthodes portant le même nom dans une interface, comme dans l’exemple suivant :

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