鉴于此示例代码,修复它的最佳方法是什么,以便处理位图:
Form1 form = new Form1();
form.ShowDialog();
form.Dispose();
public class Form1 : Form
{
private Class2 _class2;
public Form1()
{
_class2 = new Class2();
}
}
public class Class2
{
private Bitmap _bitmap;
public Class2()
{
_bitmap = new Bitmap(100,100);
}
}
我首先将_bitmap.Dispose()
放在Class2的析构函数中。但我认为这不会真的有效。
我是否需要使用Class2实现IDisposable
?然后附加到Disposed
的{{1}}事件,并在Form1
上调用dispose。
这似乎是最好的方式,但我想确保它是正确的方式。
答案 0 :(得分:2)
是的,我会实现Class2实现IDisposable
。或者你可以做类似
public class Class2
{
public Class2()
{
using (Bitmap _bitmap = new Bitmap(100,100)) {}
}
}
答案 1 :(得分:1)
这就是我这样做的方式;我相信这是“正确的”方法。
答案 2 :(得分:1)
为什么不使用using
块以及Kumar建议使用Class2实现IDisposable
?
public Form1()
{
using(Class2 _class2 = new Class2()){
//do stuff with _class2
//dispose will automatically get called when using is exited
}
}
using
阻止将确保在Class2上调用Dispose()
,并且在那里您将正确处理Bitmap
。
答案 3 :(得分:0)
我认为你应该在Class2中实现IDisposable。此外,您可能希望覆盖Form.Dispose(bool):
protected override void Dispose(bool disposing) {
if (disposing && (_class2 != null)) _class2.Dispose();
base.Dispose(disposing);
}