컴파일러 오류 CS0686

'accessor' 접근자는 'type' 형식에 대해 'member' 인터페이스 멤버를 구현할 수 없습니다.명시적 인터페이스 구현을 사용하십시오.

권장 사항: 속성 또는 이벤트와 관련되어 자동으로 생성되는 메서드와 동일한 이름의 메서드를 포함하는 인터페이스를 구현하면 이 오류가 발생할 수 있습니다. 속성에 대해 생성되는 get/set 메서드의 이름은 get_property 및 set_property이며 이벤트에 대해 생성되는 add/remove 메서드의 이름은 add_event 및 remove_event입니다. 인터페이스에 이와 동일한 이름의 메서드가 있으면 충돌이 발생합니다. 이 오류가 발생하지 않도록 하려면 명시적 인터페이스 구현을 사용하여 메서드를 구현합니다. 이를 위해서는 함수를 다음과 같이 지정합니다.

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