0
class Program
{
    public void x(int a, float b , float c) 
    {
        Console.WriteLine("Method 1 ");
    }
    public void x(float a, int b,int c) 
    {
        Console.WriteLine("Method 2 ");
    }
    static void Main(string[] args)
    {
        Program ob = new Program();
        ob.x(1, 2, 3);
    }
}

ob.x(1,2,3)見せている

エラー 1 次のメソッドまたはプロパティの呼び出しがあいまいです: ' OverloadDemo.Program.x(int, float, float)' と ' OverloadDemo.Program.x(float, int, int)'

C:\Users\Public\Videos\SampleVideos\Projectss\OverloadDemo\OverloadDemo\Program.cs 25 13 OverloadDemo

方法 2 has two arguments ofinttype and方法 1 has two argumets ofint` 型。したがって、方法 1 を優先する必要があります。

なぜエラーが発生するのですか?

4

2 に答える 2

2

への暗黙的な変換によりintfloatコンパイラは、呼び出す予定のメソッドを識別できません。タイプをより意図的にする必要があります。

ob.x(1f, 2, 3);

ob.x(1, 2f, 3f);
于 2014-12-28T06:41:08.853 に答える
0

これに対する簡単な解決策は、この署名public void x(int a, float b , float c)でメソッドを使用するときに、次のように呼び出すことです。

ob.x(1, 2.0f, 3.0f); // convert them to float

これにより、これらが float として送信され、最初のパラメーターが整数として送信されるようになります。これをテストするためのサンプルがここにあります。テストしてみてください。https://dotnetfiddle.net/9yaKJa

于 2014-12-28T06:27:43.787 に答える