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

由于 to 的隐式转换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

这将确保这些作为浮点数发送,第一个参数作为整数发送。一个测试这个的样本,在这里,做测试。https://dotnetfiddle.net/9yaKJa

于 2014-12-28T06:27:43.787 回答