zoukankan      html  css  js  c++  java
  • C# 方法参数 out、ref、param 详解

    ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为

    ref/out形式。两者都可以使函数传回多个结果。

    ref 类似于 PHP 中在函数参数前的 &

    两者区别:

    两种参数类型的设计思想不同,ref的目的在于将值类型参数当作引用型参数传递到函数,是函数的输入参数,并且在函数内部的任何改变也

    都将影响函数外部该参数的值;而out的目的在于获取函数的返回值,是输出参数,由函数内部计算得到的值再回传到函数外部,因此必须在

    函数内部对该参数赋值,这将冲掉函数外部的任何赋值,使得函数外部赋值毫无意义。

    表现为:

    1、out必须在函数体内初始化,这使得在外面初始化变得没意义。也就是说,out型的参数在函数体内不能得到外面传进来的初始值。

    2、ref必须在函数体外初始化。
    3、两者在函数体内的任何修改都将影响到函数体外面。

     

    语法:

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int n1 = 10;
                Incr(ref n1);
                Console.WriteLine(n1);
                Decr(out n1);
                Console.WriteLine(n1);
                Console.ReadKey();
            }
    
    
            public static void Incr(ref int n1) {
                n1++;
            }
    
            public static void Decr(out int n1) {
                n1 = 1;
                n1--;
            }
        }
    }

     

    params 关键字可以指定在参数数目可变处采用参数的方法参数,类似于JS 中的 arguments (JS中arguments无需指定,函数内可直接使用)(PHP中 func_get_arg() 或者使用扩展运算符...$args 用一个变量已数组的形式接收所有参数)

    在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字

    参数类型必须保持一致

        class Program
        {
            static void Main(string[] args)
            {
                fn("hello", "word");
                Console.ReadKey();
            }
    
            public static void fn(params string[] list) {
                foreach (string str in list) {
                    Console.WriteLine(str);
                }
            }
        }
  • 相关阅读:
    javaapplicationWeb application setup on Ubuntu VPS
    内容中断随想录(risc cpu的那些事)
    算法线性编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
    classnull100
    安装javaUbuntu下安装JDK1.6,并将之设为默认的JDK
    筛选实现C++实现筛选法
    调试设置移动端Web开发环境搭建实践
    路由器交换机[置顶] 路由器和交换机的综合实验⑵
    卡数字怀念的东西:魔方
    密码配置配置SSH免密码登陆
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9509075.html
Copyright © 2011-2022 走看看