Partager via


Erreur du compilateur CS0686

Mise à jour : novembre 2007

Message d'erreur

L'accesseur 'accesseur' ne peut pas implémenter le membre d'interface 'membre' pour le type 'type'. Utilisez une implémentation d'interface explicite.
Accessor 'accessor' cannot implement interface member 'member' for type 'type'. Use an explicit interface implementation.

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

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

Cette erreur peut également se produire lorsque vous déclarez des événements. La construction d'événement 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() {}
}