![](/img/trans.png)
[英]What is the difference between Dispose and setting reference to null in C#?
[英]C#: Setting child class to null on parents dispose?
我的處置方法正確嗎? 在這個問題中,我想問一個問題,但要問一個話題才能更好地理解它。
以下面的代碼為例。
public class ParentClass : IDisposable
{
private readonly ChildClass;
public ParentClass()
{
ChildClass = new ParentClass();
}
public void Dispose()
{
ChildClass.Dispose();
ChildClass = null;
}
}
public class ChildClass : IDisposable
{
private Dictionary<int> myIds;
public ChildClass()
{
myIds = new Dictionary<int>();
}
public void Dispose()
{
myIds.Clear();
myIds = null;
}
}
您所有問題的答案是否定的 。 .NET程序使用托管代碼,這意味着平台將為您清理所有這些對象。
現在,如果您訪問文件,數據庫等非托管資源,則需要使用IDisposable
來確保及時清理所有非托管資源。
但是像Dictionary<>
這樣的東西會自行清理。
可以用不同的方式回答是否在Dispose()中將成員設置為null。 (如許多其他答案所述-參見右側的“相關”)僅對於本身是一次性的成員是必需的。
首先,如果未將成員聲明為只讀,則很可能僅在Dispose()中將成員設置為null。 因此,僅將它們設置為非只讀可能不是一個好的設計模式。 如果確實在處理之后將其設置為null,則還必須在執行此操作之前檢查是否為null,因為您必須始終能夠多次調用Dispose()且沒有副作用或異常。 將成員設置為null還有助於防止在處置后再次意外使用該對象(因為訪問該成員將導致異常)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.