最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#中默认参数和可变参数的使用与限制

CSharp 宇托 318浏览 2条评论

C#中的默认参数相对Java来说是一个很不错的语法。当然可变参数params也不错,Java中也有,其语法是...

那么两者在使用上有哪些限制和注意点呢?

先说说默认参数

  1. 默认参数必须放在所有必须参数之后。
  2. 因为默认参数的设值方式,所以默认参数不能用outref来修饰。
  3. 默认参数在调用时如果能匹配多个函数,会优先调用默认完全配置的那个函数,如果都是不完全匹配,会编译出错。

可变参数

  1. 可变参数必须放到所有参数之后。
  2. 可变参数不能有任何修饰,自然也不能用outref来修饰。
  3. 可变参数可以放到默认参数之后。
  4. 可变参数在调用时的如果能匹配多个函数,除可变参数之外参数最多的函数。

参考代码如下:

C#
class Program
{
    static void Main(string[] args)
    {
        // 不设置参数值
        Console.WriteLine(DefualtTest("DefualtTest 1"));
        // 按顺序设置参数值
        Console.WriteLine(DefualtTest("DefualtTest 2", "value1Test"));
        // 不按顺序设置参数值时,可以直接指定参数名
        Console.WriteLine(DefualtTest("DefualtTest 3", value2: "value2Test"));
        // 不设置参数,匹配F1
        Console.WriteLine(ParamsTest("ParamsTest 1"));
        // 设置一个参数,匹配F2
        Console.WriteLine(ParamsTest("ParamsTest 2", 1));
        // 设置两个参数,匹配F3
        Console.WriteLine(ParamsTest("ParamsTest 3", 1, 2));
        // 设置三个参数,匹配F2
        Console.WriteLine(ParamsTest("ParamsTest 4", 1, 2, 3));

        Console.ReadKey();
    }

    // 默认参数必须放在所有必须参数之后
    static string DefualtTest(string name, string value1 = "value1", string value2 = "value2")
    {
        return string.Format("1{0}: value1[{1}], value2[{2}]", name, value1, value2);
    }
    // 可变参数必须放到所有参数之后
    static string ParamsTest(string name, params int[] values)
    {
        return string.Format("F1: {0}: values[{1}]", name, string.Join(",", values));
    }
    // 可变参数可以放到默认参数之后
    static string ParamsTest(string name, int value1 = 1, params int[] values)
    {
        return string.Format("F2: {0}: value1[{1}], values[{2}]", name, value1, string.Join(",", values));
    }

    static string ParamsTest(string name, int value1, int value2)
    {
        return string.Format("F3: {0}: value1[{1}], value2[{2}]", name, value1, value2);
    }
}

转载请注明:宇托的狗窝 » C#中默认参数和可变参数的使用与限制

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 学习了
    购物街2016-06-06 18:37:33回复
  2. 谢谢分享。
    泉州软件公司2016-05-12 15:18:27回复