ref和out关键字的使用

作用:
在一个方法中,通常传入的参数,是原值的Copy的副本。当这个方法执行完毕之后,这个副本就会被销毁,原值不受影响。
但是有的时候,我们需要改变这个变量的原值,就需要向方法传递这个变量的引用。我们知道值类型修改原值的副本,但是指向引用类型时修改的就是原值。这个时候我们需要使用ref和out这两个关键字。

ref和out的区别:
ref: 通过ref传递到方法的参数必须先初始化(赋值);
out:通过out传递到方法的参数可以不必赋值;
共同点:在一定程度上解决了一个函数只能有一个返回值的问题。

ref代码示例:

 		static void Main(string[] args)
        {
            double salary = 5000;//基本工资
            JiangJin(ref salary);//这里的salary必须赋初值
            Console.WriteLine("奖励500后为{0}", salary);

            FanKuan(ref salary);
            Console.WriteLine("罚款1000后为{0}",salary);
            Console.ReadKey();
        }
        /// <summary>
        /// 求奖金
        /// </summary>
        /// <param name="salary">基本工资</param>
        /// <returns>奖金</returns>
        static void JiangJin(ref double salary)
        {
            salary += 500;//奖金为基本工资+500  同为 salary+=500;
        }
        /// <summary>
        /// 求罚款
        /// </summary>
        /// <param name="salary">基本工资</param>
        /// <returns>罚款</returns>
        static void FanKuan(ref double salary)
        {
            salary -= 1000;
        }

在这里插入图片描述
上面的代码中我们发现,尽管JiangJi()方法中传入的是原值,但是打印的却是方法中已经改变后的值,这个就是ref的作用。

out代码示例:

 		static void Main(string[] args)
        {
            int age=26, lastAge, beforeAge;
            GetValue(26, out lastAge, out beforeAge);//这里的参数可以不用赋初值
            Console.WriteLine("年龄为{0}的话,去年年龄是{1}岁,明年年龄为{2}岁!!!", age, beforeAge, lastAge);
            Console.ReadLine();
        }
        /// <summary>
        /// 获取比传入年龄的小1岁和大1岁的年龄
        /// </summary>
        /// <param name="age">当前年龄</param>
        /// <param name="lastAge">小1岁</param>
        /// <param name="beforeAge">大1岁</param>
        public static void GetValue(int age,out int lastAge,out int beforeAge)
        {
            lastAge = age + 1;
            beforeAge = age - 1;
        }

在这里插入图片描述
通过上面的代码,我们除了可以返回小一岁的年龄,还可以返回大一岁的年龄,这个就是out的作用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值