ref与out 实现改变调用者的变量数据

当我们做项目中,常常会遇到过调用其他类的方法,获取方法的返回值作下一个方法的参数。
以前我们的做法是声明一个变量,接收方法的返回值,要返回的值多的就返回数组。
当需要返回的数据越来越多时,我们会发现上面的方法效率很低。
上网查找解决方法时在微软官方教程看到ref与out。他们的作用悄悄解决了上面方法的不足。
微软官方给出的ref定义是:
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字
out的定义:
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字
个人通俗理解就是:调用者将变量作为参数传给有ref或者out的方法,方法执行完之后,方法对参数修改值的话,调用者的变量的值也会改变
例子如下:
写一个学生信息的类

public class student
    {
        //学生编号
        public string studentCode { get; set; }
        //学生名称
        public string studentName{ get; set; }
        //性别
        public string sex { get; set; }
        //性别
        public string age { get; set; }
    }

写一个方法 ,里面是通过ref修饰的student类型的变量st

public void setstudent( ref student st)
        {
            var str = st.studentCode;
            if (str.Substring(3,1)=="0")
            {
                st.sex = "男";
            }
            else
            {
                st.sex = "女";
            }
            st.age = str.Substring(4, 2);
            return;
        }

然后调用上面方法:

student st = new student();
            st.studentCode = "001018";
            st.studentName = "甲";
            setstudent(ref st);

结果如下图:
在这里插入图片描述
Out的用法和ref的一致,只是out的变量参数可以只声明不赋初始值。
注意:out的方法内必须对out 的参数赋值:
例如:

public void setint(out int i)
        {
            i = 1;//必须给变量赋值,不然会报错
        }

个人总结:一般是根据变量的值来给变量赋值的 用ref,好比上面的学生信息;
如果是本来方法里面就有值,只需调用者传个容器过来的就用out。
如果一般是基本数据类型或者是对数值的一些运算的话两种皆可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值