out与ref

来源:互联网 发布:如何看待网络用语 编辑:程序博客网 时间:2024/06/10 23:10

之前或许没好好学,今天认真看一下还是很清晰的

先贴段代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace template{    class Program    {           static void TestOut(out int num)        {            //此处不可以使用,因为out变量必须被赋值过一次后才可以被读取!            //Console.WriteLine("Here is {0}", num);            //注释掉会出错            num = 5;            //同理,此处可以,因为被赋值过一次            Console.WriteLine("Here is {0}", num);        }        static void TestRef(ref int num)        {            //与out做出对比,随意用。            Console.WriteLine("Here is TestRef {0 }", num);            //注释掉不会出错            num = 4;            Console.WriteLine("Here is TestRef {0 }", num);        }        static void Main(string[] args)        {            int k;            TestOut(out k);            Console.WriteLine(k);            int testRef=5;            //注释掉上面的  使用  int testRef;会报错            TestRef(ref testRef);            Console.WriteLine(testRef);        }               }       }           


其实区别也很明显

对于ref而言,在传参前不仅要有声明,而且要有初始化。

对于out而言,在传参前声明即可,不必须初始化。

原因是 out在使用时,在形参部分的函数中,必须被赋过一次值,才可以使用。否则编译器会报错。注意若有多个out变量就需要每一个都至少在函数中赋值过一次!


我觉得至于多个返回值什么的,其实ref和out是一样的,ref在函数中可以得到多个值,并且被改变,而out也同样可以。个人觉着不算区别。


仅个人理解,有错望纠正!


原创粉丝点击