C# ref和out的使用

总目录



前言

主要介绍ref 和 out 的使用,同时简单了解一下堆栈以及传值和传址赋值的区别。


一、传值赋值和传址赋值

1.堆栈

堆栈简单来说,就是计算机存储数据的一个数据模型。
模型分为堆和栈两部分,栈中主要存放一些简单结构的数据和复杂数据的索引,堆中存储复杂数据结构的数据内容。
简单的数据结构就是值类型,复杂数据结构就是引用类型

2.传值赋值和传址赋值

  • 传值赋值:赋值运算符操作的是值类型数据或字符串
  • 传址/引用赋值:赋值运算符操作的是引用类型数据,除字符串

通过案例解释一下:

        static void Main(string[] args)
        {
            string astr = "1024";
            //将astr的值 赋值给 bstr
            string bstr = astr;
            //重新给astr 赋值
            astr = "2048";
            //输出结果
            Console.WriteLine($"astr:{astr},bstr:{bstr}");

            //结果 astr:2048,bstr:1024
            Console.ReadLine();
        }

由上可知我们在对值类型以及字符串进行赋值的时候,是将值进行的复制。

        static void Main(string[] args)
        {
            string[] astrArr = { "张三1","张三2", "张三3" };
            //将astrArr 赋值 给bstrArr
            string[] bstrArr = astrArr;
            //更改astrArr[2] 的值
            astrArr[2] = "李四2";
            //输出
            Console.WriteLine($"bstrArr[2]:{bstrArr[2]}");
            //结果  bstrArr[2]:李四2
            Console.ReadLine();
        }

由上可知我们在对引用类型(除字符串)进行赋值的时候,是将数据内容的索引或叫地址进行的复制,两个数组指向同一个地址,因此修改其中一个数组的内容,另一个数组也会变化。

二、ref 和 out

1.异同点

相同点:ref和out 都是传址的,执行方法后,原来的值都会改变。
不同点:

  • 使用ref时,传入的参数必须初始化,而使用out时不需要初始化
  • ref能把参数的值传进方法,而out要把参数的值清空,退出方法时,所有out参数必须赋值
  • out 更侧重输出,即是说将传进方法的参数,自行在内部赋值,然后给到外部使用,正因它是必须在内部赋值,所以它不在乎该变量是否有初始值
  • ref 更侧重修改,即是说传进方法的参数本身就有值,在方法内部对变量值进行修改,它只是对变量的值进行修改,因此他要求变量必须有初始值

2.案例说明

        private static void testRef(ref int a,ref int b)
        {
            a = b;//可以不做任何操作,因为它们是必须有初始值的,这里是将b赋值给a
        }

        private static void testOut(out int a,out int b)
        {
            a = 11;
            b = 22;//必须赋值,否则报错,因为它们不一定有初始值
        }

        static void Main(string[] args)
        {
            int num1 = 1111, num2 = 2222;
            //使用ref的时候必须赋初始值,然后在方法内部进行修改
            testRef(ref num1,ref num2);
            Console.WriteLine($"num1={num1},num2={num2}");
            //输出结果:num1=2222,num2=2222

            int x, y;
            //使用out,必须在方法内部赋值
            testOut(out x,out y);
            Console.WriteLine($"x={x},y={y}");
            //输出结果:x=11,y=22

            Console.ReadLine();
        }

ref和out 从某个角度来说,可以解决C#中只能有一个返回值的问题。


总结

以上就是今天要介绍的内容,希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值