此方法由公共Dispose方法和Finalize方法调用。 [..] Finalize调用Dispose并将disposing设置为false。
但是,Stream
及其超类MarshalByRefObject
都没有析构函数,Object
的析构函数为空。
那么Stream.Dispose(bool)
方法如何调用Finalize
?
答案 0 :(得分:2)
Stream
是一个抽象类,因此可以保证至少应该继承一层低层。 In that inherited class是终结器所在的位置。
我不知道他们的确切原因,但可能是因为you don't need the finializer由于非零开销而不强迫你,最大的成本是你的对象可能不会被收集在Gen 0垃圾收集期间,即使它非常短暂(详见this linked article)。