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
我想问一些关于 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