请考虑以下代码:
Public Class MyOwnClass
Public Property MyString As String
Public Property MyImage As Image
End Class
Dim MyList As New List(Of MyOwnClass)
Public Sub Add()
MyList.Add(New MyOwnClass With {.MyString = "MyString", .MyImage = Image.FromFile("C:\MyPath\MyPic.png")})
End Sub
Public Sub Clear()
MyList = Nothing
End Sub
我定义一个带有Image的引用的类,我的类的列表。
第一个Sub
将一个项目添加到列表中,我的问题是关于第二个Sub
:
是否使列表的引用无效,以使垃圾收集器消灭我的类实例和引用的图像?
他们看起来都是我的管理资源,所以我的答案是“当然是!”,但不能确定。
谢谢。
答案 0 :(得分:0)
不,图像不是托管资源。它实现了IDisposable,所以你需要处理它,否则你将在程序中稍后得到GDI +错误。
因为Image是IDisposable,所以你需要创建自己的类IDisposable。使用常用模式将Finalizer添加到MyOwnClass,以确保正确处理图像。我不做VB,但这是C#中的一般想法
public class MyOwnClass : IDisposable
{
public Image MyImage {get;set;}
private bool disposed = false;
private bool disposing = false;
~MyOwnClass()
{
this.dispose();
}
private void dispose()
{
if(! disposed && ! disposing)
{
disposing = true;
if(this.MyImage != null) this.MyImage.Dispose();
this.MyImage = null;
}
disposed = true;
}
public void Dispose()
{
GC.SupressFinalizer(this);
this.dispose();
}
}