我见过通过'using'语句自动处理的对象示例,这是定义对象范围和强制置换的明确方法。
我还看到在最后的try / catch / finally块中调用了dispose。
但是,假设一次性对象被实例化为表单类中的属性初始值设定项,如何确保在该场景中调用Dispose?
答案 0 :(得分:1)
如果你的意思是这样的话:
var form = new Form { Dependency = new DisposableDependency() };
然后Form
类应该在自己的Dispose()
方法中处理它,最好的方法是实现自己的IDisposable
或者在Close()
方法中处理这样的一次性依赖项,如果这样的话存在。
答案 1 :(得分: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);
}
设计器文件的这个特定部分不会被覆盖,但是,开发人员可能会忽略设计器文件,假定自动生成代码。另一种处理方式,例如挂钩处理表格的事件可能更适合您的需要。
答案 2 :(得分:0)
您可以让Form实现IDisposable,并在Form.Dispose()
中调用对象上的Dispose()方法答案 3 :(得分:0)
让你继承自IDisposable 比用 使用(var myclass = new myclass()) {} 希望这会对你有所帮助。