コンパイラ エラー CS0686

更新 : 2007 年 11 月

エラー メッセージ

アクセサ 'accessor' は、インターフェイス メンバ 'member' を型 'type' に対して実装できません。明示的なインターフェイスの実装を使用してください。

推奨事項 : このエラーは、実装しているインターフェイスに、プロパティまたはイベントに対して自動的に生成されるメソッドと同じ名前のメソッドが存在する場合に発生します。プロパティの get/set メソッドは get_<プロパティ> および set_<プロパティ> として生成されます。また、イベントの場合は、add/remove メソッドが add_<イベント> および remove_<イベント> として生成されます。インターフェイスに、これらと同じ名前のメソッドが存在すると、名前の競合が生じます。このエラーを回避するには、明示的なインターフェイスの実装を使用してメソッドを実装します。そのためには、関数を次のように指定します。

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

使用例

次の例では 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() {}
}

このエラーは、イベントの宣言で発生する場合もあります。イベントの制御構文では、add_event および remove_event というメソッドが自動的に生成されるため、インターフェイス内の同じ名前のメソッドと競合します。

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