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

时间:2013-04-02 10:00:34

标签: c# optimization stack

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

MyObj obj = new MyObj();
MyReturn ret = obj.DoSomething();
AnotherReturn rett = ret.DoSomethingElse();

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

AnotherReturn rett = new MyObj().DoSomething().DoSomethingElse();

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

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

2 个答案:

答案 0 :(得分:2)

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

所以你的两个样本是有效的。

你有反射器吗?您可以尝试这两种方法并检查生成的IL代码,以确切了解它们之间的差异。

答案 1 :(得分:0)

虽然2个电话是相同的但是如果你有很多“Dots”,那么它就是代码气味(Demeter法则)。

见下文discussion