-6
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

4 回答 4

9

用一个简单的句子“更具体比不那么具体

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

这是因为 C# 中的方法重载解析规则。

您可以在此答案中阅读更多信息

于 2015-02-17T10:18:54.363 回答
2

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

于 2015-02-17T10:18:37.800 回答
1

简单来说,这里选择了两个显式参数的那个。

我不声称知道规范中该决定背后的原因,但我会想象它类似于“您费尽心思明确处理传入两个参数的情况,所以这将是唯一明智的选择方法选择"

于 2015-02-17T10:20:53.983 回答
1

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

于 2015-02-17T10:21:02.563 回答