• ref和out


    Ref 把值传递变成引用传递

    当调用一个方法时,传入的参数是一个值类型,那么需要方法将这个传入的值类型的变量值改变受到影响,我们可以使用ref 关键字进行处理实现。

    观察一:

    结论:

    根据值类型和引用类型的特点,值类型是赋值,是复制传递的是栈上存储的具体值信息,如图实参变量"a"将100赋值给方法形参"num"变量。那么值类型的改变只会影响值的本身,形参的改变没有形象到变量"a"。

    加上ref修饰形参:

    结论:

    通过ref关键字,此时传递变量a的时候,实参把引用传给了形参,那么说明了这两个变量将指向同一个引用地址,变量num在方法中的改变会影响到变量a

    输出结果:101

    使用ref关键字的时候需要注意:

    1.用了ref关键的方法,必须在参数列表上加上ref关键字,在调用该方法的时候也要加上ref关键字。

    2.作为传入修饰了ref的方法的实参变量,必须赋初始值

    作用总结:如果想使一个值类型的变量,通过传入一个方法进行改变,可以使用ref


    OUT 让方法返回多个值

    从语法规则上来讲,一个方法只能有一个返回值,如果return多个值简直是天方夜谭,如图:

    通过out的方式实现:

      static void Main(string[] args)
            {
    
                int a ;
                changeNum(out a);
                Console.WriteLine(a); //结果为101
            }
    
            static stringchangeNum(out int num)
            {
                num = 100;
                num++;    
                 return "ok";
            }

    使用out关键字需要注意:

    1.在方法定义和方法调用时,都要加上out关键字

    2.方法参数列表上修饰了out关键字的变量,必须在方法体赋初始值,对于方法调用提供的实参变量可以不需要赋值。


    面试题

    ref与out的区别是什么?

    使用ref的时候要传入相应方法的实参变量,必须赋值。而out在调用的时候只用声明,但是在方法内部,修饰了out形参必须赋值。

    ref和out有着异曲同工之妙,都可以实现相同的功能,ref侧重于将值类型的值传递改变为引用传递,out侧重于对于一个方法返回多个值

  • 相关阅读:
    MyBatis热部署
    FreeMarker速查手册
    SpringBoot从Eclipse添加的Tomcat容器中启动
    Delphi中的GetEnumName和GetEnumValue的使用方法
    [数据库连接字符串] Access 连接字符串
    [数据库连接字符串] Access 连接字符串
    Ms SQLServer中的Union和Union All的使用方法和区别
    Ms SQLServer中的Union和Union All的使用方法和区别
    RasAPI函数实现PPPOE拨号
    RasAPI函数实现PPPOE拨号
  • 原文地址:https://www.cnblogs.com/green-jcx/p/5909047.html
Copyright © 2020-2023  润新知