C#参数修饰符、可变参数、可选参数

发表于2018-11-26
评论0 4.8k浏览
    //out
    //out修饰的参数必须是变量, 在函数体内必需进行赋值, 且必须在参数使用前赋值
    //因此在调用函数传参时,out修饰的参数值是用不到的, 可以不对其赋值, 传入函数体后, 要先赋值再使用
    void ParameOut(out int value)
    {
        value = 0;
    }
    //ref
    //ref修饰的参数必须是变量, 在函数内部可以先使用该参数, 再修改参数值或不改变参数值
    //因此在调用函数传参前必需赋值
    void ParameRef(ref int value)
    {
        Debug.Log(value);
        value++;
        Debug.Log(value);
    }
    //可变参数/params
    //可以传入多个类型相同, 但数量不固定的参数
    //params修饰的参数必须是一维数组
    //可传入多个参数, 无参数时默认传入长度为0的数组
    //可传入数组 (如果传入null, 函数内部需要判断空值)
    //params修饰的参数必须是最后一个参数, 同样一个函数也只能有一个params修饰的参数
    void ParameMore(int value01, params int[] values)
    {
        string str = value01.ToString();
        if (values != null)
        {
            for (int i = 0; i < values.Length; i++)
            {
                str += "  " + values[i];
            }
        }
        Debug.Log(str);
    }
    //可选参数/默认参数
    //形参设置默认值, 函数调用时可以不传递该参数, 采用该默认值, 如果传参, 则使用实参
    //可选参数必须在必需参数之后, 可选参数可以有多个
    //利用可选参数可以实现类似函数重载
    void ParameDefault(int value01, int value02 = 2, string value03 = "three")
    {
        string str = value01 + "  " + value02 + "  " + value03;
        Debug.Log(str);
    }
//调用
    void Start()
    {
        //调用
        int tmpValue01;
        ParameOut(out tmpValue01);
        int tmpValue02 = 2;
        ParameRef(ref tmpValue02);
        int[] array = { 0, 1, 2, 3, 4, 5 };
        ParameMore(1, array);
        ParameMore(1);
        ParameMore(1, null);
        ParameMore(1, 2, 3);
        ParameDefault(1, 2);
    }
    还有一个参数修饰符this,有兴趣可以了解一下
   利用This扩展静态方法(链式编程)

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: