gpt4 book ai didi

c# - 使用 ref 的函数调用中的 C# 执行顺序是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:36:08 25 4
gpt4 key购买 nike

所以我刚刚在我们的代码中发现了这个错误:

class A
{
public int a;
}
var x = new A();
x.a = 1;
A qwe(ref A t) {
t = new A();
t.a = 2;
return t;
}
void asd(A m, A n) {
Console.WriteLine(m.a);
Console.WriteLine(n.a);
}

asd(x, qwe(ref x));
asd(x, qwe(ref x));

函数调用的执行顺序是否指定了参数的顺序?

这里写的是:

1
2
2
2

这意味着在调用第二个参数的函数之前保存第一个参数的引用。

这是定义的行为吗?我在 C# 语言规范中找不到有关执行顺序的具体信息。

最佳答案

C# 要求传递给方法的参数表达式从左到右求值。

即使 qwe 在调用 asd 之前完成了它的工作,C# 已经捕获了对“旧”A 的引用 调用 qwe 为调用做准备。这就是为什么 asd 的第一次调用的第一个参数在被新的 A 对象替换之前获取“旧”A 对象的原因在 qwe 调用中。

关于c# - 使用 ref 的函数调用中的 C# 执行顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569323/

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