Прочитать на английском

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


Ошибка компилятора CS0473

Реализация явного интерфейса "имя_метода" соответствует более чем одному членом интерфейса. Фактический выбор конкретного члена интерфейса зависит от реализации. Попробуйте вместо явной реализации использовать неявную реализацию интерфейса.

В некоторых случаях универсальный метод может получить такую же сигнатуру, что и неуниверсальный метод. Проблема заключается в том, что система метаданных Common Language Infrastructure (CLI) никаким способом не может однозначно установить, какой метод привязан к какому слоту. Это определение делается на усмотрение CLI.

Исправление ошибки

Чтобы исправить ошибку, удалите явную реализацию и реализуйте оба метода интерфейса в неявной реализации public int TestMethod(int).

Пример

Следующий код приводит к возникновению ошибки CS0473:

C#
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;
    }
}

См. также