当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么是使用ref的函数调用中的C#执行顺序?》经验,为你挑选了1个好方法。

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

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#lang规范中找到有关执行顺序的具体信息.



1> dasblinkenli..:

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

即使qwe在调用之前完成其工作asd,C#也会A 调用qwe以准备调用之前捕获对"old"的引用.这就是为什么第一次调用的第一个参数在被调用内的新对象替换之前获取asd"旧" A对象A的原因qwe.


@DominikDitoIvosevic C#中很少有未指定的内容([请参阅此问答以及C#编译器团队前团队负责人的回答](http://stackoverflow.com/a/1860953/335858)).这种特殊行为[在语言规范的第7.5.1.2节中有详细说明](http://stackoverflow.com/a/7360045/335858).
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有