out与ref

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

先贴段代码

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也同样可以。个人觉着不算区别。


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值