我見過通過'using'語句自動處理的對象示例,它是定義對象範圍和強制處置的明確方式。如何處理不通過使用(屬性初始值設定項)的對象?
我也見過在try/catch/finally塊的finally中調用dispose。
但是,假設一次性對象被實例化爲表單類中的屬性初始值設定項,那麼如何確保在該場景中調用Dispose?
我見過通過'using'語句自動處理的對象示例,它是定義對象範圍和強制處置的明確方式。如何處理不通過使用(屬性初始值設定項)的對象?
我也見過在try/catch/finally塊的finally中調用dispose。
但是,假設一次性對象被實例化爲表單類中的屬性初始值設定項,那麼如何確保在該場景中調用Dispose?
如果你的意思是這樣的:
var form = new Form { Dependency = new DisposableDependency() };
然後Form
類應該將其置於自己的Dispose()
方法中,最好的辦法是實現自己的IDisposable
,或者在Close()
方法中存在這種一次性依賴項。
'Form'已經實現了'IDisposable',你只需要確保這個其他對象被放置在'Dispose'方法中。 – Servy
有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);
}
設計文件的這個特別的部分是被過度寫的,但是,開發者可能忽視了設計師文件假設自動生成的代碼是安全的。另一種處置方式,如掛鉤到表單的處置事件可能更適合您的需求。
考慮在後面的代碼中添加部分方法,例如'AddtionalDispose',以便部分方法可以在非設計器.cs文件中實現。 – Servy
讓你自IDisposable 類繼承的使用比使用 (VAR MyClass的=新MyClass的()) {} 希望這有助於你。
表單具有Dispose方法。在那裏,您可以調用Dispose處理其他對象,將它們綁定到表單的生命週期。 – dash
假設WinForms,你可以在'Form.Dispose()'覆蓋 – Pete