Поделиться через


Ошибка компилятора 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.

Bb311050.alert_note(ru-ru,VS.90).gifПримечание.

Эта ошибка возникает в 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;
    }
}

См. также

Другие ресурсы

Fabulous Adventures in Coding