我已经看到通过“使用”语句自动处置的对象的示例,这是定义对象范围和强制处置的明确方式。
我还看到在 try/catch/finally 块的 finally 中调用了 dispose。
但是,假设一次性对象被实例化为表单类中的属性初始化程序,我如何确保在这种情况下调用 Dispose?
如果你的意思是这样的:
var form = new Form { Dependency = new DisposableDependency() };
那么Form
类应该在自己的Dispose()
方法中处理它,最好的方法是实现自己的方法IDisposable
或者在方法中处理这种一次性依赖关系(Close()
如果存在)。
根据您的需要,有多种技术可以完成此任务。来自 MSDN:
When a form is closed, all resources created within the object are closed and the form is disposed.
如果属性的生命周期直接与表单相关联,那么您可以在设计器文件中重写的 Dispose 方法中对对象进行 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);
}
设计器文件的这个特定部分不会被覆盖,但是,开发人员可能会忽略设计器文件,假设是自动生成的代码。另一种处理方式,例如挂钩到 Form 的 dispose 事件可能更适合您的需要。
让您从 IDisposable 继承类而不是使用 using(var myclass=new myclass()) {} 希望这对您有所帮助。
您可以让表单实现 IDisposable 并在 Form.Dispose() 中对对象调用 Dispose() 方法