如何通过Dispose或Finalize免费获得资源?

时间:2013-07-01 07:19:30

标签: dispose finalize

我有三节课。 Class1,Class2和Class3。我有循环依赖(class1到class2,class2到class3,class3到class1)。在这种情况下,如何通过dispose方法或finalize()释放资源?

1 个答案:

答案 0 :(得分:2)

在对象上实施IDisposable时,您还要对所有权做出决定。如果Class1引用Class2,则必须确定Class1是否拥有Class2,还是仅存储引用。如果Class1拥有Class2Class2IDisposable,则Class1也应实施IDisposableClass1应致电Dispose } Class2方法中的Dispose引用,但仅在明确调用时 - 而不是在最终确定时。

由于IDisposable还定义了所有权层次结构,因此在处置时不能具有循环依赖关系。当然Class1可以拥有Class2拥有Class3Class3可以拥有对Class1的引用,但因为Class3不拥有Class1 1}}处置时不应在引用上调用Dispose

在最终确定期间,实现IDisposable的类应该只释放非托管资源,而不是在它拥有的类上调用Dispose,因为垃圾收集器可能已经完成了这些实例。