如题,我有如下代码:
public static class M
{
public static int Plus(this int i, int p=6)
{
return i + p;
}
}
public static class N
{
public static int Plus(this int i)
{
return i + 10;
}
}
class Program
{
static void Main()
{
int i = 3.Plus();
Console.WriteLine(i);
}
}
程序运行的结果是输出了13,看起来是调用了class N当中的扩展方法。
我的疑问是: 删掉class N,那么程序就会调用class M的扩展方法,输出9。那么编译器到底按照什么规则来决定到底调用哪一个扩展方法呢? 有没有可依据的标准?
谢谢。
------解决思路----------------------
应该是根据最匹配的参数吧,默认参数优先级低于重构,这东西没去msdn找最官方的解释看过
------解决思路----------------------
默认会找最匹配的。
------解决思路----------------------
你把M、N 定义的位置换一换看看是不是调用了M的。
------解决思路----------------------
N.Plus 无传入参数
M.Plus 有一个可缺省传入参数
你 3.Plus() 没有传递参数,自然执行的是 N.Plus
删去 N 后,3.Plus() 虽然没有传递参数,但仍可执行 M.Plus,因为他的参数可缺省。不然就要报错了
由于没认真看你的代码,我 #5 的回复想当然了。请原谅