簡體   English   中英

C#:將子級設置為null時父母處置?

[英]C#: Setting child class to null on parents dispose?

我的處置方法正確嗎? 在這個問題中,我想問一個問題,但要問一個話題才能更好地理解它。

  • 是否需要在處理時將列表,字典和任何類型的集合設置為null?
  • 我是否需要清除收集中的垃圾?
  • 處理時是否需要將子類設置為null?

以下面的代碼為例。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM