컴파일러 오류 CS0686

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

제안: 이 오류는 속성 또는 이벤트와 연결된 자동 생성된 메서드와 충돌하는 메서드 이름을 포함하는 인터페이스를 구현할 때 발생할 수 있습니다. 속성에 대한 get/set 메서드가 get_property 및 set_property로 생성되고, 이벤트에 대한 add/remove 메서드가 add_event 및 remove_event로 생성됩니다. 인터페이스에 이러한 메서드 중 하나가 포함되어 있으면 충돌이 발생합니다. 이 오류를 방지하려면 명시적 인터페이스 구현을 사용하여 메서드를 구현합니다. 이 작업을 수행하려면 함수를 다음과 같이 지정합니다.

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

예 1

다음 샘플에서는 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() {}  
}  

예제 2

이벤트를 선언할 때도 이 오류가 발생할 수 있습니다. 이벤트 구문은 add_eventremove_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() {}  
}