Errore del compilatore CS0686

Aggiornamento: novembre 2007

Messaggio di errore

La funzione di accesso 'funzione di accesso' non può implementare il membro di interfaccia 'membro' per il tipo 'tipo'. Utilizzare un'implementazione esplicita dell'interfaccia.
Accessor 'accessor' cannot implement interface member 'member' for type 'type'. Use an explicit interface implementation.

Suggerimento: questo errore può verificarsi quando si implementa un'interfaccia contenente nomi di metodi in conflitto con i metodi associati a una proprietà o un evento, che vengono generati automaticamente. I metodi get/set per le proprietà e add/remove per gli eventi sono generati rispettivamente come get_property/set_property e add_event/remove_event. Se in un'interfaccia è presente uno di questi metodi, si genera un conflitto. Per evitare l'errore, implementare i metodi tramite un'implementazione esplicita dell'interfaccia. A questo scopo, specificare la funzione come:

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

Esempio

Il seguente codice di esempio genera l'errore 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() {}
}

Questo errore può venire visualizzato anche quando si dichiarano gli eventi. Il costrutto evento genera automaticamente i metodi add_event e remove_event, che potrebbero trovarsi in conflitto con i metodi di un'interfaccia associati allo stesso nome, come nell'esempio seguente:

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