params参数和正常参数

时间:2015-02-17 10:15:08

标签: c# .net params method-resolution-order

using System;
using System.Collections.Generic;

namespace Generics
{
    class Minivan
    {
        public void foo(int z, int x)
        {
            Console.WriteLine("foo with two parameters");
        }
        public void foo(params int[] z)
        {
            Console.WriteLine("foo with two params parameter");
        }
    }
    class D
    {
        public static void Main()
        {
            Minivan car3 = new Minivan();
            car3.foo(10,20); // which method will be called here!!!
        }
    }
}

调用哪个foo方法?为什么?

4 个答案:

答案 0 :(得分:9)

用一句简单的句子“更具体,优于不太具体

所以public void foo(int z, int x)会被调用。

这是因为C#中的method overload resolution规则。

您可以在this answer

中阅读更多内容

答案 1 :(得分:2)

编译器将选择具有显式参数的方法(如c#规范中所述)。但是如果你用3个参数调用方法,则可以调用params实现

答案 2 :(得分:1)

简单地说,这里选择具有两个显式参数的那个。

我没有声称在规范中知道该决定背后的原因,但是我会把它想象成像"你麻烦地明确处理传入两个参数的情况,因此,这将是选择"

的唯一合理方法

答案 3 :(得分:1)

这是一个简单的重载,当您使用两个参数显式调用该函数时,它将调用public void foo(int z, int x)