VB.Net Tutorial/Development/Finalize

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

Display order in which base-class and derived-class constructors and finalizers are called

<source lang="vbnet">Module Tester

  Sub Main()
     Dim circle1, circle2 As Circle
     circle1 = New Circle(72, 29, 4.5) " instantiate objects
     circle2 = New Circle(5, 5, 10)
     circle1 = Nothing " mark objects for garbage collection
     circle2 = Nothing
     System.GC.Collect() " request garbage collector to execute
  End Sub " Main 

End Module Public Class Point

  Private mX, mY As Integer
  Public Sub New()
     Console.WriteLine("Point constructor: {0}", Me)
  End Sub " New
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer)
     Console.WriteLine("Point constructor: {0}", Me)
  End Sub " New
  Protected Overrides Sub Finalize()
     Console.WriteLine("Point Finalizer: {0}", Me)
     MyBase.Finalize() " call Object finalizer
  End Sub 
  " return String representation of Point
  Public Overrides Function ToString() As String
     Return "[" & mX & ", " & mY & "]"
  End Function " ToString

End Class

Public Class Circle

  Inherits Point 
  Private mRadius As Double
  Public Sub New()
     Console.WriteLine("Circle constructor: {0}", Me)
  End Sub " New
  Public Sub New(ByVal xValue As Integer, _
     ByVal yValue As Integer, ByVal radiusValue As Double)
     MyBase.New(xValue, yValue)
     Console.WriteLine("Circle constructor: {0}", Me)
  End Sub " New
  Protected Overrides Sub Finalize()
     Console.WriteLine("Circle Finalizer: {0}", Me)
     MyBase.Finalize() " call Point finalizer
  End Sub " Finalize
  Public Overrides Function ToString() As String
     Return "Center = " & MyBase.ToString() & _
        "; Radius = " & mRadius
  End Function " ToString

End Class</source>

Point constructor: Center = [0, 0]; Radius = 0
Circle constructor: Center = [0, 0]; Radius = 0
Point constructor: Center = [0, 0]; Radius = 0
Circle constructor: Center = [0, 0]; Radius = 0
Circle Finalizer: Center = [0, 0]; Radius = 0
Point Finalizer: Center = [0, 0]; Radius = 0
Circle Finalizer: Center = [0, 0]; Radius = 0
Point Finalizer: Center = [0, 0]; Radius = 0

Override Finalize method

<source lang="vbnet">Public Class Numbered

   Private m_Number As Integer
   Public Sub New(ByVal my_number As Integer)
       m_Number = my_number
   End Sub
   " Garbage collection started.
   Protected Overrides Sub Finalize()
       Console.WriteLine("Finalize Number: " & m_Number)
   End Sub

End Class

public class Test

  public Shared Sub Main
       Dim new_numbered As New Numbered(1)
       new_numbered = New Numbered(2)
  End Sub

End class</source>

Finalize Number: 2
Finalize Number: 1