Ошибка компилятора CS0686
Обновлен: Ноябрь 2007
Сообщение об ошибке
Метод "метод доступа" не может реализовать метод доступа интерфейса "член" для типа "тип". Используйте явную реализацию интерфейса.
Accessor 'accessor' cannot implement interface member 'member' for type 'type'. Use an explicit interface implementation.
Предположение. Данная ошибка может возникать при реализации интерфейса, содержащего имена методов, которые конфликтуют с автоматически создаваемыми методами, связанными со свойством или событием. Имена методов "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() {}
}