VB.Net Tutorial/Collections/IDisposable

Материал из VB Эксперт
Перейти к: навигация, поиск

IDisposable

<source lang="vbnet">Class Point

 Implements IDisposable

 Public X = 3
 Public Y = 4
 Sub New(XX As Integer, YY As Integer)
   X = XX
   Y = YY
 End Sub 
 Public Overrides Function ToString() As String
   Return "(" & X & "," & Y & ")"
 End Function
 Public Overridable Overloads Sub Dispose() _
        Implements IDisposable.Dispose
   Console.WriteLine("Point " & Me.ToString() & " disposed of")
 End Sub 

End Class Class TwoDimension

 Implements IDisposable
 Public First As Point
 Public Second As Point
 Public Sub New()
   First = New Point(1, 2)
   Second = New Point(3,4)
 End Sub
 Public Overrides Function ToString() As String
   Return "(" & First.ToString() & "," & Second.ToString() & ")"
 End Function
 Public Overridable Overloads Sub Dispose() _
                    Implements IDisposable.Dispose
   First.Dispose()
   Second.Dispose()
   First = Nothing
   Second = Nothing
 End Sub
 Protected Overridable Overloads Sub Finalize()
   First.Dispose() 
   Second.Dispose()
   First = Nothing
   Second = Nothing
 End Sub 

End Class Module Test

 Sub Main()
   Dim P As TwoDimension = New TwoDimension()
   Console.WriteLine("The object is: " & P.ToString())
   P.Dispose()
   P = Nothing
   Console.WriteLine("The object, after disposal is " & P.ToString())
 End Sub

End Module</source>

The object is: ((1,2),(3,4))
Point (1,2) disposed of
Point (3,4) disposed of
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an ob
ject.
   at Test.Main()

Implements IDisposable

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim obj As New Named("Dispose ")
       obj.Dispose()
  End Sub
  

End class

   Public Class Named
       Implements IDisposable
       Public Name As String
       Public Sub New(ByVal new_name As String)
           Name = new_name
       End Sub
       Protected Overrides Sub Finalize()
           Dispose()
       End Sub
       Public Sub Dispose() Implements System.IDisposable.Dispose
           Static done_before As Boolean = False
           If done_before Then Exit Sub
           done_before = True
           Console.WriteLine(Name)
       End Sub
   End Class</source>
Dispose