加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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放在堆上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读