C#参数修饰符—out和ref

本文详细介绍了C#中函数参数的三种不同情况:无修饰符、out和ref。无修饰符时,传递的是变量副本,函数内部修改不影响原值。使用out修饰符,函数必须赋值给参数,主函数的变量值会改变。ref修饰符类似,但要求主函数必须先赋值,调用函数也可以修改其值。这三个关键字在处理函数参数时有重要区别,尤其在处理返回多个值和传递引用类型时。
摘要由CSDN通过智能技术生成

一、没有修饰符时

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

        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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小拭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值