【问题标题】:What exactly is parameter containing with ref modifier?带有 ref 修饰符的参数到底包含什么?
【发布时间】:2017-11-11 13:50:20
【问题描述】:

我想问一些关于 ref 修饰符的问题。

我所知道和理解的: 使用 ref 修饰符的方法,不会像按值传递那样复制数据,但参数将可以直接访问参数值。基本上说,您在方法范围内所做的一切都将与您在调用者范围内使用参数(传递的变量)一样。

我想问一下带有ref修饰符的参数中究竟存储了什么: 当我使用 ref 修饰符将参数传递给方法时,参数是否包含对参数值的引用?还是别的什么?

感谢您的回答

【问题讨论】:

标签: c# methods parameters ref


【解决方案1】:

当你有一个带有ref 属性的参数时,它通过引用而不是值传递参数。这意味着没有制作变量的新副本,而是在您的函数中使用指向原始变量的指针。

public void Foo()
    {
        var x = 0;
        Bar(x); // x still equals 0
        Bar(ref x); // x now equals 1
    }

    public void Bar(ref int x)
    {
        x = 1;
    }

    public void Bar(int x)
    {
        x = 1;
    }

【讨论】:

    【解决方案2】:

    假设我们有这个方法:

    public void DoSomething(int number)
    {
        number = 20;
    }
    

    我们使用它:

    var number = 10;
    DoSomething(number);
    Console.WriteLine("Our number is: {0}", number);
    

    输出将是Our number is: 10。我们的数字不会变成 20。

    那是因为我们按值传递,所以我们基本上是在更改之前复制number

    但是,如果我们通过引用传递

    public void DoSomething(ref int number)
    {
        number = 20;
    }
    

    然后使用我们的方法:

    var number = 10;
    DoSomething(ref number);
    Console.WriteLine("Our number is: {0}", number);
    

    然后输出变成Our number is: 20

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2022-06-16
      • 2020-02-22
      • 2021-01-31
      • 1970-01-01
      • 2019-12-18
      • 2020-08-25
      相关资源
      最近更新 更多