重新开始学习.NET之一--ref参数和out参数

重新开始学习.NET之一–ref参数和out参数

从毕业到现在不知不觉已经有一年多的时间了,从一个什么都不懂的职场新人到现在的半个办公室老油条,发现自己写代码的比以前顺畅了,但是好多以前没搞懂的知识点还是很模糊。最近重新捡起大学买的书籍来读,发现有了新的认识很收获,后面都会用博客的形式写下来。

C#函数返回的值只有一个,想要返回多个值或者在调用函数时改变某个变量的值就可以用到ref和out参数,ref和out参数用法如下:

        public static int ChangeParamsWithRef(int a, ref int b)
        {
            b = 2;
            return a + b;
        }

        public static int ChangeParamsWithOut(int a, out int b)
        {
            b = 2;
            return a + b;
        }

我们可以声明一个变量b,再来分别调用这两个:

        int a = 3;
        int b;         


        int c = ChangeParamsWithRef(a, ref b);
        int d = ChangeParamsWithOut(a, out b);

在调用ChangeParamsWithRef时编译器会报一个错误,告诉我们参数b未赋值。
从这里我们可以知道ref和out参数的第一个不同点
ref传递参数进入函数,这个参数必须初始化,而out参数可以不用初始化
实际上即使我们在使用out传递参数之前初始化了需要传递的变量,该变量还是会在函数中再次初始化一次。

现在,我们将两个函数的return语句放在b参数的赋值之前,即ref和out传递进来的参数没有发生任何改变就结束了这个函数:

        public static int ChangeParamsWithRef(int a, ref int b)
        {
            return a + b;
            b = 2;
        }

        public static int ChangeParamsWithOut(int a, out int b)
        {
            return a + b;
            b = 2;
        }

这时编译器会报一个错误,告诉我们在执行return语句之前必须要对out参数赋值,并且在ChangeParamsWithOut中的return语句会报一个使用了未赋值的参数b的错误

通过上面的这个例子我们知道了ref和out参数的另外一个不同点:
out参数在函数结束之前必须对其赋值,且out参数在进入函数后会被重新初始化

ref和out参数有一个共同点:
使用ref或out进行传递参数,都是传递的该参数的引用

也就是说,参数不管是结构还是自定义类,不管是Int类型还是String类型,使用了ref和out关键字最后传递的都是它的引用,这也是为什么使用ref和out可以在函数内部改变值类型变量的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值