2014-12-28 4 views
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) показываетC# перегружать неоднозначность

Ошибка 1 Вызов неоднозначен между следующими методами или свойствами: 'OverloadDemo.Program.x(int, float, float)' и 'OverloadDemo.Program.x(float, int, int)'

C: \ Users \ Public \ Видео \ SampleVideos \ Projectss \ OverloadDemo \ OverloadDemo \ Program.cs 25 13 OverloadDemo

Способ 2 has two arguments of int type and Способ 1 has two argumets of тип int. Таким образом, метод 1 должен быть одобрен.

Почему возникает ошибка?

+0

Я не мог найти что-нибудь в C# спецификации, что бы сказать, что число неявных преобразований, необходимых для удовлетворения вопросов параметров метода , – MarcinJuraszek

+0

Тогда по какой причине метод 1 не одобрен? – fz8975

+0

Потому что спецификация C# не говорит, что нужно? – MarcinJuraszek

ответ

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

2

Из-за неявного преобразования int в float компилятор не может определить, какой метод вы намеревались вызывать. Вы должны были бы быть более преднамеренным с типами:

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

против

ob.x(1, 2f, 3f); 
Смежные вопросы