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方法?为什么?
答案 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)