[英]Do I need to dispose transient disposable objects?
我有一個創建多個IDisposable對象的類,然后所有這些對象都傳遞給第三方庫中的另一個'manager'類。 由於我在以后的調用中需要一些對象,因此我保留了對創建對象的本地字段引用,以便我以后可以訪問它們。 當我在類上運行FxCop時,它說我應該實現IDisposable,因為我保留了引用的一次性對象。 我的問題是:
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.