Ошибка компилятора CS0473
Обновлен: Ноябрь 2007
Сообщение об ошибке
Явная реализация интерфейса 'имя метода' совпадает с несколькими членами интерфейса. Выбранный член интерфейса зависит от реализации. Попробуйте использовать неявную реализацию.
Explicit interface implementation 'method name' matches more than one interface member. Which interface member is actually chosen is implementation-dependent. Consider using a non-explicit implementation instead.
В некоторых случаях универсальный метод может получить такую же подпись, как и метод, не являющийся универсальным. Проблема заключается в том, что система метаданных CLI не может однозначно установить, какой метод привязан к какой ячейке. Решение об этом принимает инфраструктура CLI.
![]() |
---|
Эта ошибка возникает в Visual Studio 2008 в местах, где она не возникала в Visual Studio 2005. |
Исправление ошибки
- Удалите явную реализацию и с помощью неявной реализации public int TestMethod(int) реализуйте оба метода интерфейса.
Пример
Следующий код вызывает ошибку CS0473.
// cs0473.cs
public interface ITest<T>
{
int TestMethod(int i);
int TestMethod(T i);
}
public class ImplementingClass : ITest<int>
{
int ITest<int>.TestMethod(int i) // CS0473
{
return i + 1;
}
public int TestMethod(int i)
{
return i - 1;
}
}
class T
{
static int Main()
{
ImplementingClass a = new ImplementingClass();
if (a.TestMethod(0) != -1)
return -1;
ITest<int> i_a = a;
System.Console.WriteLine(i_a.TestMethod(0).ToString());
if (i_a.TestMethod(0) != 1)
return -1;
return 0;
}
}