C#方法重载-为什么首先调用integer方法?为什么不加倍?

C#方法重载-为什么首先调用integer方法?为什么不加倍?,c#,overloading,C#,Overloading,我试图理解一个关于方法重载的基本问题 如果一个类有两个重载方法,如下所示: Add(int a,int b); Add(2, 3); 及 在Main方法中,如果我调用如下方法: Add(int a,int b); Add(2, 3); 然后总是调用带有整数参数的方法Add(inta,intb) 为什么它不调用另一个方法Add(双i,双y)?因为双精度类型还可以保存从主方法调用传递的值2、3。因为2和3具有类型int,所以具有int参数的重载非常适合。如果要调用带有double参数的重载,

我试图理解一个关于方法重载的基本问题

如果一个类有两个重载方法,如下所示:

Add(int a,int b);
Add(2, 3);

Main
方法中,如果我调用如下方法:

Add(int a,int b);
Add(2, 3);
然后总是调用带有整数参数的方法
Add(inta,intb)


为什么它不调用另一个方法
Add(双i,双y)
?因为双精度类型还可以保存从主方法调用传递的值
2、3

因为2和3具有类型
int
,所以具有
int
参数的重载非常适合。如果要调用带有
double
参数的重载,则必须传递double或float。

,因为编译器将调用参数更接近您调用的方法。如果调用add(2,3),这两个参数都是整数,它将为您调用add(int,int)

因为
2,3
是整数参数。尝试
Add(2.0,3.0)如果您有两种方法,即
静态int Add(int a,int b)=>a+b;静态双加(双a,双b)=>a+b
并传入int和double,重载解析将在双参数方法上结束。这是因为有一个从
int
double
的隐式转换,谢谢你的文章链接。这本书读起来很有趣,因为它还谈到了我在重载过程中无法想到的其他情况。@jdpenix是的,你是对的,我会编辑它。如果编译器不能隐式强制转换,那么这种情况只会导致编译错误?