木子屋 Dnawo's BLOG

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

👤 dnawo 📅 2009-06-09 👁 4298 👍 0 💬 0 🔄 本站原创
几天前无意中写了这么两个函数:

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)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 .NET中使用Newtonsoft.Json进行序列化 下一篇 → HOW TO:从资源管理器中拖放文件到控件