C#重载歧义

时间:2014-12-28 06:20:02

标签: c# overloading ambiguous-call

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 of int type and方法1 has two argumets of int`类型。 所以方法1应该受到青睐。

为什么会出错?

2 个答案:

答案 0 :(得分:2)

由于int隐式转换为float,编译器无法识别您打算调用的方法。你必须对这些类型更加有意识:

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

VS

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

答案 1 :(得分:0)

一个简单的解决方案,就是当您使用此签名public void x(int a, float b , float c)使用该方法时,请将其称为“

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

这将确保将它们作为float发送,并将第一个param作为整数发送。一个测试它的样本,在这里,测试它。 https://dotnetfiddle.net/9yaKJa