2013-02-01 63 views
1

我見過通過'using'語句自動處理的對象示例,它是定義對象範圍和強制處置的明確方式。如何處理不通過使用(屬性初始值設定項)的對象?

我也見過在try/catch/finally塊的finally中調用dispose。

但是,假設一次性對象被實例化爲表單類中的屬性初始值設定項,那麼如何確保在該場景中調用Dispose?

+2

表單具有Dispose方法。在那裏,您可以調用Dispose處理其他對象,將它們綁定到表單的生命週期。 – dash

+1

假設WinForms,你可以在'Form.Dispose()'覆蓋 – Pete

回答

0

你可以得到的形式實現IDisposable並調用您的對象的Dispose()方法在你Form.Dispose()

+3

'Form'已經實現'IDisposable'的對象上調用'Dispose()'。 –

+0

完美然後,更容易。 – openshac

+0

@openshac不,實際上並不容易,因爲'Dispose'方法是在設計器類中實現的,並且如果您手動修改它,那麼在重寫設計器類時/如果/當設計器類被重寫時,運行代碼的風險將被刪除。 – Servy

1

如果你的意思是這樣的:

var form = new Form { Dependency = new DisposableDependency() }; 

然後Form類應該將其置於自己的Dispose()方法中,最好的辦法是實現自己的IDisposable,或者在Close()方法中存在這種一次性依賴項。

+0

'Form'已經實現了'IDisposable',你只需要確保這個其他對象被放置在'Dispose'方法中。 – Servy

1

various techniques根據您的需要完成此任務。從MSDN:

When a form is closed, all resources created within the object are closed and the form is disposed.

如果物業的壽命直接關係到形式,那麼你就可以在設計文件中重寫Dispose方法處置的對象。因此,當您撥打form.Close()時,Disposable對象也將被處理。

/// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 

     myDisposableObject.Dispose(); 

     base.Dispose(disposing); 
    } 

設計文件的這個特別的部分是被過度寫的,但是,開發者可能忽視了設計師文件假設自動生成的代碼是安全的。另一種處置方式,如掛鉤到表單的處置事件可能更適合您的需求。

+1

考慮在後面的代碼中添加部分方法,例如'AddtionalDispose',以便部分方法可以在非設計器.cs文件中實現。 – Servy

0

讓你自IDisposable 類繼承的使用比使用 (VAR MyClass的=新MyClass的()) {} 希望這有助於你。

相關問題