Collections VB.Net Tutorial

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
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()