使用 params 关键字重载方法

moh*_*mar 1 c# parameters

class D
{
    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 Program
{
    public static void Main()
    {       
        D obj = new D();
        obj.foo(10,20);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,将执行该方法foo(int x, int y)而不是foo(params int[] z). 为什么是这样?

Run*_*tad 5

C# 编译器将始终尝试选择与参数最匹配的方法。在您的情况下,foo(int, int)重载与您的输入参数完全匹配,而foo(params int)重载是较弱的匹配。

如果您有兴趣,这里是 C# 中方法重载的一个很好的概述:http://csharpindepth.com/Articles/General/Overloading.aspx