Ref和Out的区别和联系

本文通过两个示例详细对比了C#中ref和out关键字的使用方式及区别。ref用于传递引用类型参数,调用方法时会将变量的实际地址传递给方法,从而在方法内对变量的修改能直接影响到原始变量;out同样用于传递引用,但其参数在调用前不需要初始化,并且要求方法内部必须为其赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试遇到了一个题目叫做ref和out的区别是啥?

平时经常使用out,偶尔也会使用ref,但是从来没有仔细分析过他俩有啥区别?

1.传递给ref关键字的参数必须赋初始值,而out不用。

2.out关键字会清空变量,退出函数时所有out引用个变量都要赋值。

该如何理解这句话呢?

********************************************************************************************************

       static void Main(string[] args)
        {
           int count =0;//
            ChangeOut(out count);
            Console.WriteLine(count);//输出值是105
            Console.ReadKey();
        }
        public static int ChangeOut(out int counts)//这里会清空counts的值
        {
            counts = 100;//这时候counts相当于没有值传递进来,在return之前要对counts赋值
            counts = counts + 5;
            return 1;

        }

********************************************************************************************************

  static void Main(string[] args)
        {
            int count = 100;//
            ChangeRef(ref count);

            Console.WriteLine(count);//输出值为105

           ChangeRef(ref count);
            Console.WriteLine(count);//由于count的值被ChangeRef方法修改,这时候count输出值为110

            Console.ReadKey();
        } 
        public static void ChangeRef(ref int counts)
        {
            counts = counts + 5;
        }

********************************************************************************************************

从以上两个例子可以看到,out在主函数赋值之后,值不会传入到方法中,需要在方法体中从新赋值,然后会把方法中最终值带出来。

ref在调用方法时,会把方法传入到方法体中,最终会直接改变主函数中的值。

仅仅从结果看,二者看不出直接区别,只是实现原理不同。

PS:out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值