【发布时间】:2016-02-03 09:56:21
【问题描述】:
在我的Main() 中,我从ClassA 调用MethodA(),然后它将从ClassB 调用MethodB(),依此类推。这持续了大约 5 层,然后它最终将我想要的值返回给 Main()。
每个方法中都有一个对象正在被传递和处理。
这是一个好习惯吗?这种情况还有其他方法吗?
【问题讨论】:
在我的Main() 中,我从ClassA 调用MethodA(),然后它将从ClassB 调用MethodB(),依此类推。这持续了大约 5 层,然后它最终将我想要的值返回给 Main()。
每个方法中都有一个对象正在被传递和处理。
这是一个好习惯吗?这种情况还有其他方法吗?
【问题讨论】:
是的,这是一个很好的做法。
而且 5 个级别仍然非常接近于零。到了 500 你可能会停下来想一想,到了 5000 就会令人担忧。
每个方法中都有一个对象正在被传递和处理。
它将通过引用传递,因此没有开销。
【讨论】:
调用堆栈的深度为 5 不算什么。在您在 Windows 窗体或 WPF 应用程序中完成任何操作之前,您已经拥有 5 个调用堆栈。
将框架放入堆栈确实需要一些成本,但您现在不必为此担心太多。您必须注意是否要递归执行操作,因为帧的数量会迅速增加。这可能会很昂贵。
如果您丢失了调用堆栈的概览,您必须担心。在我看来,100 的调用堆栈很难阅读,如果你是初学者肯定会。
【讨论】:
如果您使用一种算法 - 例如 - 递归地运行一个字符数组以生成每个字符组合(不,我不是暴力密码黑客!) - 然后是深度递归调用堆栈也许是解决方案的一部分。
正如 Henk Holterman 所说,通过引用传递的每个对象只是一个指针,32 位整数或 64 位整数,具体取决于处理器架构/构建配置。每次调用 4 个字节或 8 个字节。
【讨论】: