gpt4 book ai didi

c# - 关于c#中参数传递的一个问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:58 25 4
gpt4 key购买 nike

以下示例摘自 Jon Skeet 的文章“Parameter passing in C#”。

我的问题是:为什么在第一个示例中变量 y 是NOT null,而我们在第二个示例中看到它已被更改:

1-

void Foo (StringBuilder x)
{
x = null;
}

...

StringBuilder y = new StringBuilder();
y.Append ("hello");
Foo (y);
Console.WriteLine (y==null);

2-

void Foo (StringBuilder x)
{
x.Append (" world");
}

...

StringBuilder y = new StringBuilder();
y.Append ("hello");
Foo (y);
Console.WriteLine (y);

谢谢

最佳答案

y 在第一个示例中不是 null,正是因为参数是按值传递的。计算参数表达式(简单的 y),并将其值(对 StringBuilder 的引用)复制到参数变量 (x) 中,如下所示初始值。

更改 x 的值不会更改 y 的值。

第二个示例没有更改参数 (x) 的值 - 它更改了 x 引用的对象内的数据。 y 的值仍然没有改变:它仍然引用相同的 StringBuilder 对象,只是该对象现在包含不同的数据。

如果我给你一张纸,上面写着我的家庭住址,然后你去那个地址,把房子漆成红色,你不会改变这张纸的任何内容,是吗?如果您确实在纸上划掉了我的地址(如第一个示例),这不会改变对我地址的想法——就像改变值一样x 的值不会改变 y 的值。

关于c# - 关于c#中参数传递的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4678534/

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