c#:是存储引用好还是将其作为参数传递好?

本文关键字:参数传递 存储 引用 | 更新日期: 2023-09-27 18:08:17

我有一个维护子对象列表的父对象。它周期性地迭代子对象列表,并对每个子对象调用DoWork方法。有时候,子对象必须引用DoWork方法中的父对象。是更好地存储一个指向父类的引用,使用最多4字节(对吗?)内存的子类数量,还是在每次调用DoWork()方法时将引用作为参数传递给父类?传递额外参数的开销是多少?在这方面MS .NET和Mono有什么不同吗?

c#:是存储引用好还是将其作为参数传递好?

当调用子例程时,将设置一个堆栈帧来保存所有输入参数和在被调用方法的签名中定义的局部变量,或者作为局部方法作用域的实例字段。因此,无论您将其作为输入参数传递还是将其作为本地字段存储,都不会有太大区别。

更重要的是,所讨论的方法是否可以从父对象以外的代码中调用,父对象可能不可用…如果是这样,则需要将引用存储为子字段的私有字段。

两者开销相同,即最小。

但是,如果子节点可以从父节点分离或重新连接到另一个父节点,那么你就有了管理子节点中存储引用的开销。

我个人认为每次从父母那里传递"this"是最好的方法。

一般来说,将对父类的引用传递给方法而不是存储它似乎是更好的主意。我能想到的最好的理由是,与存储的引用相比,方法参数对垃圾收集器施加的压力更小。该引用不受垃圾收集的约束,因为它在调用堆栈退出时被自动清除。另外,如果您需要传递一个不同的实例,您可以轻松地做到这一点。