gpt4 book ai didi

c# 按值传递

转载 作者:行者123 更新时间:2023-11-30 13:11:41 25 4
gpt4 key购买 nike

我只是想举个例子:

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# 编译器可以将两个 xy 在堆上。

关于c# 按值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com