当前位置: 代码迷 >> C# >> 两个扩展方法,作用一样,编译器怎么判断到底用哪一个
  详细解决方案

两个扩展方法,作用一样,编译器怎么判断到底用哪一个

热度:89   发布时间:2016-05-05 03:24:25.0
两个扩展方法,作用一样,编译器如何判断到底用哪一个?
如题,我有如下代码:

    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 的回复想当然了。请原谅
  相关解决方案