我有三节课。 Class1,Class2和Class3。我有循环依赖(class1到class2,class2到class3,class3到class1)。在这种情况下,如何通过dispose方法或finalize()释放资源?
答案 0 :(得分:2)
在对象上实施IDisposable
时,您还要对所有权做出决定。如果Class1
引用Class2
,则必须确定Class1
是否拥有Class2
,还是仅存储引用。如果Class1
拥有Class2
且Class2
为IDisposable
,则Class1
也应实施IDisposable
,Class1
应致电Dispose
} Class2
方法中的Dispose
引用,但仅在明确调用时 - 而不是在最终确定时。
由于IDisposable
还定义了所有权层次结构,因此在处置时不能具有循环依赖关系。当然Class1
可以拥有Class2
拥有Class3
而Class3
可以拥有对Class1
的引用,但因为Class3
不拥有Class1
1}}处置时不应在引用上调用Dispose
。
在最终确定期间,实现IDisposable
的类应该只释放非托管资源,而不是在它拥有的类上调用Dispose
,因为垃圾收集器可能已经完成了这些实例。