簡體   English   中英

我是否需要處理瞬時一次性物品?

[英]Do I need to dispose transient disposable objects?

我有一個創建多個IDisposable對象的類,然后所有這些對象都傳遞給第三方庫中的另一個'manager'類。 由於我在以后的調用中需要一些對象,因此我保留了對創建對象的本地字段引用,以便我以后可以訪問它們。 當我在類上運行FxCop時,它說我應該實現IDisposable,因為我保留了引用的一次性對象。 我的問題是:

  1. 我應該為我的班級實施IDisposable嗎? (或者是經理的責任嗎?)
  2. 如果是這樣,我應該只處理我保留參考的對象嗎? 或者我應該找到一種處理我創建的所有對象的方法。

我的代碼:

public class MyClass  
{  
    ClassThatIsDisposable aReference;  
}

public MyClass(ManagerClass manager)  
{  
    ClassThatIsDisposable transient=new ClassThatIsDisposable();  
    manager.Add(transient);  
    aReference=new ClassThatIsDisposable();  
    manager.Add(aReference);  
}

public void LaterCall()  
{  
    areference.Method();  
}  

擁有該對象的類是應該處理它們的類......聽起來你的經理是所有者,所以他應該處置該對象。

如果您試圖避免FXCop警告,那么一個選項是讓MyClass每次需要使用它時從管理器請求一次性對象。 這樣您就不會有成員變量持有對它的引用。 您可以這樣做,我使用Add()方法返回已添加對象的akey,然后在需要使用它時使用此鍵從管理器中檢索對象。

如果您創建任何一次性物品,您應該自己處理它們或確保將它們交給另一個負責此類的課程。

在這種情況下,我會說這實際上取決於經理類將要做什么。 如果這可以保證它會處理添加到它的任何東西,那你沒問題。 它確實看起來像一個有點奇怪的設計模式 - 我不能說我自己使用過類似的東西。 這並不是說它必然是錯誤的/壞的,但至少值得再看看是否有任何方法可以避免這種輕微的所有權混淆。

請記住,如果經理處理您持有引用的對象,則之后可能無法使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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