[C#]当函数重载碰上params

几天前无意中写了这么两个函数:

string Test(string name, params string[] args);
string Test(string name, string str, params string[] args);

今天看了就有这么一个疑问:当传两个string类型参数时哪个函数会被调用?用事实说话吧:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Test("Jack"));//No.1
            Console.WriteLine(Test("Jack", "Hi"));//No.2
            Console.WriteLine(Test("Jack", "Hi", "How are you?"));//No.2

            Console.ReadKey();
        }

        static string Test(string name, params string[] args)
        {
            return "No.1";
        }

        static string Test(string name, string str, params string[] args)
        {
            return "No.2";
        }
    }

}

显然,后者的优先级比前者高,那前者的params参数就没有意义了,正确的函数定义:

string Test(string name);
string Test(string name, string str, params string[] args);


评论: 0 | 引用: 0 | 查看次数: 3711
发表评论
登录后再发表评论!