ref修饰符包含的参数到底是什么?

What exactly is parameter containing with ref modifier?

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

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

我想问的是用ref修饰符的parameter到底存储了什么: 当我使用 ref 修饰符将参数传递给方法时,参数是否会包含对参数值的引用?还是其他原因?

感谢您的回答

当你有一个带有 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;
    }

假设我们有这个方法:

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