嗨,大家只是想知道采取以下的例子
public void main()
{
int x = 1;
Foo(x);
}
public void Foo(int y)
{
y = 5;
}
Run Code Online (Sandbox Code Playgroud)
我们知道C#参数是按值类型的值传递的.这是否意味着在上面的例子中我在堆栈上有2个副本,一个用于x,一个用于y ??
谢谢
Jon*_*eet 14
是的,堆栈上会有两个独立的变量.它们将在两个不同的堆栈帧中 - 一个用于main一个用于foo(假设没有内联).当Foo返回时,值x将仍然是1,而不是5.
实际上,对于引用类型和值类型,参数始终在C#中默认传递值.唯一的区别是对于引用类型,参数值是引用 - 而不是对象本身.
有关详细信息,请参阅我关于参数传递的文章.
请注意,堆栈上的实际行为是一个实现细节:C#编译器必须确保程序的行为与规范中的定义相同,但不强制执行堆栈或堆行为.所以x 确实必须有在你的代码的最后1的值,而是一个有效的C#编译器可能已经把两者x并y在堆上.
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |