コンパイラ エラー CS0473

更新 : 2007 年 11 月

エラー メッセージ

明示的なインターフェイスの実装 'メソッド名' に一致するインターフェイス メンバが 2 つ以上あります。どのインターフェイスが実際選択されるかは実装に依存しています。代わりに、明示的ではない実装の使用をお勧めします。

ジェネリック メソッドに、非ジェネリック メソッドと同じシグネチャが必要な場合があります。問題は、どのメソッドがどのスロットにバインドするか明確に示すための方法が、共通言語基盤 (CLI: Common Language Infrastructure) のメタデータ システムにないことです。この決定は CLI により行われます。

Bb311050.alert_note(ja-jp,VS.90).gifメモ :

このエラーは、Visual Studio 2005 では発生しませんでしたが、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