tnblog
首页
视频
资源
登录
有个性,不需要签名
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术

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

3809人阅读 2018/11/22 11:27 总访问:227325 评论:0 收藏:0 手机
分类: .NET

说说自己对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可同时改变函数内和函数外的值




欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价