• 一个方法教你认识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修饰的参数不需要初始化。

  • 相关阅读:
    Flask路由系统
    Flask配置方式
    Flask应用启动流程
    Flask简介及使用
    python调用支付宝支付接口
    python调用腾讯云短信接口
    Celery简介以及Django中使用celery
    django中使用redis
    Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
    git操作
  • 原文地址:https://www.cnblogs.com/ZGQ-VIP/p/9635582.html
Copyright © 2020-2023  润新知