VB.Net/Data Structure/IDisposable
Версия от 16:40, 26 мая 2010; (обсуждение)
Dispose - called when we need disposing
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
Use IDisposable
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