zoukankan      html  css  js  c++  java
  • 一个方法教你认识ref(简单易懂)

    参数分为值类型和引用类型,当我们将一个值类型的参数进行传递到另一个方法的时候相当于,将这个变量进行复制到该方法进行操作,但是不会对该变量原始的值有影响。

    但是有时候我们需要他有“影响”于是ref就出现了。在参数的前面添加ref关键字。如下例子可以进行理解。

    static void Main(string[] args)
    {
    int x = 0;
    GetVal(x);
    Console.WriteLine(x);
    //x=0,很遗憾,传递的是值类型,x的值没有变化

    GetRefVal(ref x);
    Console.WriteLine(x);
    //x=10, x的值已经改变啦
    Console.ReadLine();
    }

    private static void GetVal(int x)//这里只是单纯的复制x=0这个变量.传说中的传值
    {
    x = 10;
    }

    private static void GetRefVal(ref int x)//参数x是1个指向堆栈中值类型为int的指针
    //传说中的传址
    {
    x = 10;
    }

    在C#中,你给一个方法传输值类型参数时,实际上是使用的这个参数的一个副本,就是将原来的变量复制一份,然后传给一个方法,让其进行操作。所以在方法内部对参数的修改等不会对原来的参数造成影响(这个其实就是值类型和引用类型的区别)。但是有些时候,又需要这种影响。ref的作用就是这个。它将变量本身而不是副本传给方法,所以对参数的修改原来变量的值。
    int a = 0;
    Console.WriteLine(a.ToString()); //输出是0
    public void ModifyVaule(ref int a)
    {
    a = 1;
    }
    Console.WriteLine(a.ToString()); // 输出是1。
    此外,out修饰符也起到这个作用,二者的区别就是ref需要初始化,而out修饰的参数不需要初始化。

  • 相关阅读:
    结合源码理解Spring MVC处理流程
    Spring Bean的生命周期分析
    面试官:给我说一下你项目中的单点登录是如何实现的?
    Java中的四种引用
    JWT实战总结
    Java读写锁的实现原理
    深入的聊聊Java NIO
    一线大厂Mysql面试题详解
    脱发、秃头防不胜防?这里有一份给码农的减压指南
    手把手教你提高代码Java运行的效率
  • 原文地址:https://www.cnblogs.com/ZGQ-VIP/p/9635582.html
Copyright © 2011-2022 走看看