c#按值传递
发布时间:2020-12-15 19:43:12 所属栏目:百科 来源:网络整理
导读:嗨,大家只是想知道采取以下的例子 public void main(){ int x = 1; Foo(x);}public void Foo(int y){ y = 5;} 我们知道C#参数是按值类型的值传递的.这是否意味着在上面的例子中我在堆栈上有2个副本,一个用于x,一个用于y ?? 谢谢 解决方法 是的,堆栈上会有两
嗨,大家只是想知道采取以下的例子
public void main() { int x = 1; Foo(x); } public void Foo(int y) { y = 5; } 我们知道C#参数是按值类型的值传递的.这是否意味着在上面的例子中我在堆栈上有2个副本,一个用于x,一个用于y ?? 谢谢 解决方法
是的,堆栈上会有两个独立的变量.它们将在两个不同的堆栈帧中 – 一个用于main,一个用于foo(假设没有内联).当Foo返回时,x的值仍然是1,而不是5.
实际上,对于引用类型和值类型,参数始终在C#中默认传递值.唯一的区别是对于引用类型,参数值是引用 – 而不是对象本身. 有关详细信息,请参阅我的article on parameter passing. 请注意,堆栈上的内容的实际行为是implementation detail:C#编译器必须确保程序的行为与规范中的定义相同,但这并不强制执行堆栈或堆行为.因此x必须在代码末尾具有值1,但是有效的C#编译器可能将x和y放在堆上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |