VB.Net by API/System/IDisposable

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

Implements IDisposable

<source lang="vbnet"> Imports System Imports System.Drawing Imports System.Data Imports System.IO Imports System.Collections Imports System.Windows.Forms Imports System.Drawing.Printing Public Class MainClass

   Shared Sub Main()
       Dim file As New MyFile("c:\FinalizeDemo.txt")
       file.AddText("Hello, world!")
       " now, clear the reference to the object...
       file.Dispose()
       file = Nothing
       " wait for the user to press return...
       Console.WriteLine("Press Return to collect the garbage...")
       " force a collect...
       GC.Collect()
       " wait for the user to quit...
       Console.WriteLine("Press Return to quit...")
   End Sub

End Class

Public Class MyFile

   Implements IDisposable
   Private stream As FileStream
   Private isDisposed As Boolean
   Public Sub New(ByVal filename As String)
       stream = New FileStream("test.txt", FileMode.OpenOrCreate)
       Console.WriteLine("Object " & GetHashCode() & " created.")
       Console.WriteLine("Using file: " & filename)
   End Sub
   Public Sub AddText(ByVal buf As String)
       If isDisposed = True Then
           Throw New ObjectDisposedException("I"ve been disposed!")
       End If
       Dim writer As New StreamWriter(stream)
       writer.WriteLine(Date.Now)
       writer.WriteLine(buf)
       writer.Close()
   End Sub
   Public Sub Dispose() Implements System.IDisposable.Dispose
       If isDisposed = True Then Return
       
       stream.Close()
       stream = Nothing
       isDisposed = True
       GC.SuppressFinalize(Me)
       Console.WriteLine("Object " & GetHashCode() & " disposed.")
   End Sub
   Protected Overrides Sub Finalize()
       Dispose()
       Console.WriteLine("Object " & GetHashCode() & " finalized.")
   End Sub

End Class


 </source>