VB.Net/Data Structure/IDisposable
Dispose - called when we need disposing
<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>
Use IDisposable
<source lang="vbnet"> Imports System Imports System.Runtime.InteropServices Imports System.Drawing Imports System.ruponentModel Imports System.Windows.Forms Imports System.IO Imports System.Xml.Serialization Public Class MainClass
Shared Sub Main(ByVal args As String()) Dim i As Integer = 0 i += 1 Dim obj As New Named("Dispose " & i) 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 " Free resources. Protected Overrides Sub Finalize() Dispose() End Sub " Display our name. 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>