2015-05-30 71 views
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 
+3

集合類不應該顯式地處理其中的對象。 GC通常會爲我們做所有這些工作(來自MSDN:*垃圾收集器會在不再使用該對象時自動釋放分配給管理對象的內存*)。如果這些類分配資源,那麼*它們*應該實現'IDisposable'來根據需要進行清理。如果你運行CA,它會告訴你哪些類應該實現它。 – Plutonix

+0

感謝Plutonix。很高興知道。 – JoeB

回答

0

如果您確實想要顯式處理它們,您可以使用與創建它們相同的方法(一旦完成它們)來完成。父對象中沒有被完成。