C#--ref 和 out 区别

本文详细介绍了C#中out和ref关键字的使用方法及其区别。通过具体示例展示了如何利用这两个关键字实现方法间的数据传递,包括单个变量及多个返回值的情况。
out传值用法

在Main里面和方法里面一起用out(请看下面比较),如果方法的参数用out 修饰了,那么这个参数 必须在方法里 进行赋值。

     static void Main(string[] args)
            {

                int number1 = 10;

                int sum = AddNumber(number1);

                Console.WriteLine(number1);


                Console.WriteLine(sum);
                Console.ReadKey();


            }


            public static int AddNumber( int num1)
            {
                           return num1 + 20;

//显示10,30
改变后

利用out传值后,按照方法里面的赋值,之前的赋值不管用了。 并且修饰方法的参数可以不再Main赋值,但是方法里面必须给这个out修饰符赋处值。

      static void Main(string[] args)
            {

                int number1 = 10;//可以不用赋值。

                int sum = AddNumber( out number1);

                Console.WriteLine(number1);


                Console.WriteLine(sum);
                Console.ReadKey();

                //如果方法的参数用out 修饰了,那么这个参数 必须在方法里 进行赋值。

            }


            public static int AddNumber(  out int num1)
            {
                num1 = 100;   //因为用out,所以必须赋值
                return num1 + 20;

            }
    //显示100,120
举例:多个返回值方法:
    static void Main(string[] args)
            {

                int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8 };
                int max;
                int min;
                int sum = ArraySum(nums, out max, out min);  //必须每个都要用out,下面方法同理。

            }

            public static int ArraySum(int []numbers,out int max,out int min)
            {
                max = int.MinValue;
                min = int.MaxValue;

                int sum=0;
                for (int i=0;i<numbers.Length ;i++)
                {
                    if (numbers[i]>max)
                    {
                        max=numbers[i];
                    }

                    if (numbers[i]<min)
                    {
                        min=numbers [i];
                    }
                    sum+=numbers [i];
                }
            }

ref:只要有ref的出现必须在Main里面赋初值


static void Main(string[] args)
            {

                int number1=10; //因为有ref必须有初值。
                int number2 =20;
                int sum=show(ref number1,ref  number2);

                Console.WriteLine("{0},{1},{2}",number1,number2, sum);
                Console.ReadKey();

         //ref 和之前的没写没有关系,但是有了ref后一定要赋初值。
         //out 可以将方法里的值传出去。
         // ref可以把值传到方法里,又可以 传出去。

            }
            public static int show(ref int num1, ref int num2)
            {
                num1 = 100;
                num2 = 200;
                return num1 + num2;
            }
//显示:100,200,300; 
//如果将方法里面的赋值去掉的话,则显示10,20,30
举例:ref返回值判断:
static void Main(string[] args)
        {
            int number = 90;
            int num = show(ref number);
            Console.WriteLine(number);
            Console.ReadKey();

        }
        public static int show(ref int num)
        {
            num = 10;
            return num + 10;
        }
        //显示:10; 原因:之前赋值为90 被送进来,但是里面赋值后变成了10 ,然后又通过ref送了出去。
ref和out区别

out可以将方法里的值传出去,ref可以把值传到方法里面来,也可以传出去。

评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值