4
我有一個表示一組文件的容器類。有10種不同類型的文件,每種文件有24個小時文件。我爲每個文件類型創建了一個子類,並創建了一個24小時的子類的列表,共240個類。處理列表中的子類
當我完成容器類時,我想要處理它,但是是否需要處理所有的單個類實例?這是我在Container類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,它會告訴你哪些類應該實現它。 – Plutonix
感謝Plutonix。很高興知道。 – JoeB