영어로 읽기

다음을 통해 공유


컴파일러 오류 CS0473

명시적 인터페이스 구현 'method name'이 두 개 이상의 인터페이스 멤버와 일치합니다. 실제로 선택되는 인터페이스 멤버는 구현에 따라 다릅니다. 대신 비명시적 구현을 사용하는 것이 좋습니다.

경우에 따라 제네릭 메서드가 제네릭이 아닌 메서드와 동일한 서명을 가져올 수 있습니다. 문제는 CLI(공용 언어 인프라) 메타데이터 시스템에 어떤 메서드가 어떤 슬롯을 바인딩하는지 명확하게 나타내는 방법이 없다는 점입니다. CLI에 따라 결정해야 합니다.

이 오류를 해결하려면

오류를 수정하려면 명시적 구현을 제거하고 암시적 구현 public int TestMethod(int)에서 인터페이스 메서드를 모두 구현합니다.

예시

다음 코드에서는 CS0473을 생성합니다.

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

참고 항목