C# out、ref关键字的用法和区别

来源:互联网 发布:ps dr3插件for mac 编辑:程序博客网 时间:2024/05/19 11:50

说说自己对out、ref的认识,面试问到的几率很高哟。


out:

    class Program    {        /*         * out、ref都是引用传递,传递后使用都会改变原有的值         * out是只出不进。ref是有进有出,         *          * out用法,一般用于需要返回多个参数时,如在需要返回分页的数据时 同时返回总条数或者TryParse()会用到         * ref用法,一般用于在改变一个参数时,把他的改变反应到变量中 如在递归中         *          */      #region Out        static void Main(string[] args)        {            Program p = new Program();            //out传递参数时不用赋值(如果赋值也会被清空)            string out_s;            p.out_func(out out_s);            Console.WriteLine(out_s);            Console.ReadLine();//暂停窗口        }        /// <summary>        /// out传入后需要赋值才能返回        /// </summary>        /// <param name="i"></param>        public void out_func(out string s)        {            s = "out参数已赋值,返回。";        }      #endregion    }
输出:









ref:

 class Program    {      #region ref        static void Main(string[] args)        {            Program p = new Program();                      //ref传递时如果未初始化赋值 则会报错 :使用了未赋值的局部变量“ref_s”            string ref_s = "已初始化。";            p.ref_func(ref ref_s);            Console.WriteLine("返回的ref参数:" + ref_s);            Console.ReadLine();//暂停窗口        }        /// <summary>        /// ref传入前需要赋值,传入后可不做操作返回原值        /// </summary>        /// <param name="s"></param>        public void ref_func(ref string s)        {            Console.WriteLine("传入的ref参数:" + s);            s += "已赋值返回。";        }             #endregion    }
输出:





总结:

  •  out、ref都是引用传递 (传递后改变传递的值会影响原来的值)
  •   out不需要初始化 需要在传入的方法内部完成初始化赋值     ref必须初始化赋值
  •   out用于获取函数内部的值                       ref可同时改变函数内和函数外的值


0 0
原创粉丝点击