تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
موضوع للنقاش- الواجهة IDisposable
#3
كاتب المشاركة : samerselo

المثال الثاني

هذا المثال الذي كنت أجرب عليه

كود :
Imports System.IO

Public Class ReturnTextFromaFile
Implements IDisposable

Private m_stream As Stream
Private m_RedText As String
Private m_FileName As String
Private buf() As Byte

Public Sub New(ByVal FName As String)
m_FileName = FName
End Sub

Public Function GetTextFromFile() As String
Try
m_stream = New FileStream(m_FileName, FileMode.Open)
ReDim buf(m_stream.Length)
m_stream.Read(buf, 0, m_stream.Length - 2)
m_stream.Close()

Dim enc As New System.Text.UnicodeEncoding
m_RedText = enc.GetString(buf)

Return m_RedText

Catch ex As Exception
MsgBox(ex.Message)
Finally
m_stream.Close()
End Try

Return "! - ERROR - !"

End Function

Private disposedValue As Boolean = False ' To detect redundant calls

' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' free other state (managed objects).
m_stream.Dispose()
End If
' free your own state (unmanaged objects).
' set large fields to null.
buf = Nothing
m_RedText = String.Empty
m_FileName = String.Empty
End If
Me.disposedValue = True
End Sub

#Region " IDisposable Support "
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region

End Class
هذا المثال أقوم فيه بقراءة كامل محتويات ملف نصي وأعيدها من خلال وظيفة تعيد قيمة من النوع String ومن أجل القيام بهذا العمل استخدمت مجموعة من المتغيرات في بداية تعريف الفئة حيث أن المتغير m_stream يمثل مصادر مدارة وباقي المتغيرات مثل المصادر الغير مدارة

كود :
Private m_stream As Stream
Private m_RedText As String
Private m_FileName As String
Private buf() As Byte
لايهمنا كثيرا في هذا الموضوع وظيفة الفئة هنا ولكن يهمنا هنا هو موضوع النقاش الإجراء المحمي Dispose حيث أن كوده في هذه الفئة هو

كود :
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' free other state (managed objects).
m_stream.Dispose()
End If
' free your own state (unmanaged objects).
' set large fields to null.
buf = Nothing
m_RedText = String.Empty
m_FileName = String.Empty
End If
Me.disposedValue = True
End Sub
لاحظ أين وضعت كود تحرير المصادر المدارة ( m_stream ) وكود تحرير المصادر الغير مدارة ( باقي المتغيرات ) في جسم الإجراء
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
موضوع للنقاش- الواجهة IDisposable - بواسطة Raggi Tech - 05-10-12, 01:20 AM


التنقل السريع :


يقوم بقرائة الموضوع: