gpt4 book ai didi

C#混淆方法

转载 作者:太空狗 更新时间:2023-10-29 23:24:37 31 4
gpt4 key购买 nike

我一直在努力了解我必须了解的一种测试方法是怎么回事,我很难弄清楚我得到结果的原因,以及关于如何获得结果的任何解释“f”方法有效,非常感谢

class Program {
static void Main(string[] args)
{
A b = new A(); b.y = b.x;
b.f(b.y); b.g();
Console.WriteLine(b.x[0] + " " + b.x[1]); // Prints 1 7
Console.WriteLine(b.y[0] + " " + (b.x[1] + b.y[1])); // 1 14
}
}

public class A {
public int[] x = {1, 2};
public int[] y;
public void f(int[] z)
{
z[1] += 5;
}

public void g()
{
A a = new A ();
a.x[0]++;
a.x[1]--;
}
}

让我解释一下我的理解,b.y 被创建为一个数组,它在 b.x 中获取值,现在,当我们调用 b.f 时,我们传递那个方法 b.y,它是 [1, 2],现在,这里是我卡住了,z 似乎是 b.y 数组,所以它有 [1, 2] 作为值,当该方法将 5 添加到位置 1(即 2)的元素时,我得到 [1, 7] 作为结果那,当方法结束并且我的程序返回到主程序时,不知何故,b.y 和 b.x 现在都是 [1, 7],那是怎么发生的?,我认为该方法只是修改了 b.y,因为那是通过的方法.此外,g 函数不会添加任何内容,因为“a”值是一个局部变量,它会在方法结束时“消失”,对吗?我希望有人能帮助我,我必须通过这个测试!。谢谢;]

最佳答案

开始吧:

  • 一个名为 b 的新变量被初始化为 A 类型。
  • b 创建时,它将 b.x 的值设置为 {1, 2}
  • b.y 然后分配给 b.x,但是,因为它们是数组,所以它们现在引用相同的数据。
  • b.f 被调用,并将 b.y 传递给它(记住,b.yb.x 正在引用现在相同的数据)。本质上,z 在 f 函数中也指向相同的数据。
  • b.f 将 5 加到共享数据索引 1 处的值,即 2。因此 2 + 5 = 7。
  • 首先 Console.WriteLine 打印 b.x[0] 仍然是 1。然后它打印 b.x[1] 现在是 7 (如上所述)。
  • 第二个 Console.WriteLine 打印 b.y[0],它仍然是 1(因为它们共享相同的数据)。然后打印 b.x[1] + b.y[1]。它们共享相同的数据.. 索引 1 处的数据是 7。7 + 7 = 14。

您对 g 方法的看法是正确的,因为该变量是本地变量并且不执行任何操作。

希望对您有所帮助。

关于C#混淆方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504961/

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