Baca dalam bahasa Inggris

Bagikan melalui


Kesalahan Pengompilasi CS0473

Implementasi antarmuka eksplisit 'method name' cocok dengan lebih dari satu anggota antarmuka. Anggota antarmuka mana yang benar-benar dipilih bergantung pada implementasi. Pertimbangkan untuk menggunakan implementasi non-eksplisit sebagai gantinya.

Dalam beberapa kasus, metode generik mungkin memperoleh tanda tangan yang sama dengan metode non-generik. Masalahnya adalah bahwa tidak ada cara dalam sistem metadata infrastruktur bahasa umum (CLI) untuk secara tidak ambigu menyatakan metode mana yang mengikat slot mana. CLI yang berhak untuk membuat penentuan tersebut.

Untuk memperbaiki kesalahan ini

Untuk memperbaiki kesalahan, hilangkan implementasi eksplisit dan terapkan kedua metode antarmuka dalam implementasi implisit public int TestMethod(int).

Contoh

Kode berikut menghasilkan 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;
    }
}

Lihat juga