我知道dispose函數的作用是清除非託管資源。微軟模式方法與GC的矛盾?
但根據Microsoft's pattern(據我所知),他們這樣做:
他們打開了一個新的集中函數,它接受一個bool
(isDispoisng);
如果True
,所以從處置FUNC來到(使用using
或別的東西) - 和它清除非託管和管理
如果false
,它來自終結/析構函數。他殺死的只是非管理者。
我不明白爲什麼微軟的模式殺死managed
如果isDispoisng==True
(見粗體字)。
我認爲的finilize應該殺只是非託管....
能否請你解釋一下嗎?
他們想在這方面達到什麼目的?
此外,一些託管對象可以具有事件掛鉤,直到其處置後纔會釋放它。這些事件可以保持對象可達,從而阻止終結器運行。 –
@Peladao所以CLASS的dispose將釋放託管對象,該對象持有對其他非託管資源的引用?我想說的是「這個」類的finilize,而不是其他類......所以......「我的dispose函數釋放MY非託管對象,還有我的託管對象,這些對象可能沒有其他非託管對象的引用。 ..正確嗎? –
是的,Dispose實現應釋放所有非託管對象和事件處理程序,並對其擁有的任何(託管)對象調用Dispose,以便它們可以(遞歸地)執行相同操作。 – Peladao