Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在列表中处理子类_Vb.net_Dispose - Fatal编程技术网

Vb.net 在列表中处理子类

Vb.net 在列表中处理子类,vb.net,dispose,Vb.net,Dispose,我有一个容器类,它表示一组文件。有10种不同类型的文件,每种文件每小时24个文件。我已经为每种文件类型创建了一个子类,以及一个每小时24个子类的列表,总共有240个类 当我处理完容器类后,我想处理它,但是我需要处理所有单独的类实例吗?这是我关于容器类dispose方法的代码,但我不知道如何对所有子类调用dispose方法。我之所以需要它,是因为随着项目的发展,我可能需要添加更多的类和列表。感谢您的帮助 Public Sub Dispose() Implements IDisposabl

我有一个容器类,它表示一组文件。有10种不同类型的文件,每种文件每小时24个文件。我已经为每种文件类型创建了一个子类,以及一个每小时24个子类的列表,总共有240个类

当我处理完容器类后,我想处理它,但是我需要处理所有单独的类实例吗?这是我关于容器类dispose方法的代码,但我不知道如何对所有子类调用dispose方法。我之所以需要它,是因为随着项目的发展,我可能需要添加更多的类和列表。感谢您的帮助

     Public Sub Dispose() Implements IDisposable.Dispose
            Dim objType As Type = Me.[GetType]()
            Dim properties As PropertyInfo() = objType.GetProperties()

            For Each [property] As PropertyInfo In properties
                Dim tColl As Type = GetType(ICollection(Of ))
                Dim t As Type = [property].PropertyType
                Dim name As String = [property].Name
                'check for collection
                If t.IsGenericType AndAlso tColl.IsAssignableFrom(t.GetGenericTypeDefinition()) OrElse t.GetInterfaces().Any(Function(x) x.IsGenericType AndAlso x.GetGenericTypeDefinition() = tColl) Then
                    Dim listObject As IEnumerable = DirectCast([property].GetValue(Me, Nothing), IEnumerable)
                    If listObject IsNot Nothing Then
                        Dim enumerable = TryCast(listObject, IEnumerable(Of Object))
                        Dim list = enumerable.ToList()
                        For i = 0 To list.Count - 1
'dispose of child classes, like list.item(i).dispose
                        Next
                    End If
                End If
            Next
            GC.SuppressFinalize(Me)
        End Sub

如果确实希望显式地处置它们,可以使用创建它们的相同方法(一旦完成处理)。不必在父对象中执行。

集合类不需要显式地处理其中的对象。GC通常为我们做所有这些(来自MSDN:当托管对象不再使用时,垃圾收集器会自动释放分配给该对象的内存)。如果类分配资源,那么它们应该实现
IDisposable
,以便根据需要进行清理。如果您运行CA,它会告诉您哪些类应该实现它。谢谢。很高兴知道。