C#参数修饰符—out和ref

一、没有修饰符时

此时函数接收到的值是变量的副本,就算被调用时更改了变量的值,原来的变量值仍不变。

        private void Form1_Load(object sender, EventArgs e)
        {
            string message = "123";
            SendMessage(message);
            MessageBox.Show(message);//第二次
            
        }

        public void SendMessage(string message)
        {
            message = "456";
            MessageBox.Show(message);//第一次
        }

第一个显示窗口是“456”,回到主函数时,窗口显示的是“123”;可见主函数中的message值没有变化。

二、out修饰符

变量由调用函数赋值,并且必须赋值(在SendMessage函数中,变量message必须被赋值),此时被调用的是主函数中变量的地址,当调用函数执行结束,主函数中的变量值也会变成调用函数的值。(主函数中变量的值可以为空)

        private void Form1_Load(object sender, EventArgs e)
        {
            string message;//此时变量的值为空
            SendMessage(out message);
            MessageBox.Show(message);//第二次
            
        }

        public void SendMessage(out string message)
        {
            message = "456";
            MessageBox.Show(message);//第一次
        }

此时,第一次显示为“456”,就算在主函数中给message赋值了,第二次显示的仍是“456”。

而且out用途最广的是在一个函数中可以有多个返回值

        private void Form1_Load(object sender, EventArgs e)
        {
            
            double v = SellHouse(98.5, 8356, out string test);
            MessageBox.Show(v.ToString());//第一次
            MessageBox.Show(test);//第二次
        }
        public double SellHouse(double area, double price, out string test)
        {
            test = "123";
            return area * price;
        }

可以看到在SellHouse函数中返回值只有area*price,但是我们在参数中加入了out修饰的test字符串,这样在第一次显示SellHouse函数的area*price结果,第二次显示test字符串的值。

三、ref修饰符

作用和out修饰符对于变量的变化是类似的

        private void Form1_Load(object sender, EventArgs e)
        {
            string message = "123";
            SendMessage(ref message);
            MessageBox.Show(message);//第二次
           
        }

        public void SendMessage(ref string message)
        {
            message = "456";
            MessageBox.Show(message);//第一次
        }

不同点在于out修饰符必须在调用函数中赋值,而可以不在主函数赋值;

                  ref修饰符可以不再调用函数中赋值,但必须在主函数中赋值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小拭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值