C#:顺序函数调用如何工作?(效率明智)

Ada*_*ley 6 c# optimization stack

在C#中,以相当客观的方式编写是常规的,如下所示:

MyObj obj = new MyObj();
MyReturn ret = obj.DoSomething();
AnotherReturn rett = ret.DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)

我可以像这样写上面的内容:

AnotherReturn rett = new MyObj().DoSomething().DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)

但是,当你在这样的序列中进行一系列函数调用时,堆栈框架如何工作?这个例子相当简单,但想象一下,如果我有50多个链接的函数调用(这可能发生在JavaScript(/ w jQuery)之类).

我的假设是,对于每个函数调用,返回地址(到"点"?),然后返回值(带有其他方法的新对象)立即被泵入该返回地址的下一个函数调用.这是如何工作到整体返回值(在这个例子中,返回地址将最终的函数值分配给rett)?如果我一直链接电话,我最终会溢出?在这种情况下,采取客观路线(以"不必要的"记忆分配为代价)是否更为明智?

Mat*_*son 2

这与在单独的行上调用每个方法完全相同,每次将返回值分配给一个变量,然后使用该变量调用下一个方法。

所以你的两个样本实际上是相同的。

有反光镜吗?您可以尝试这两种方法并检查生成的 IL 代码以准确了解两者之间的差异。