我看到很多关于如何处理类的“教程”,但是我无法理解加上所有这些都是在c#中解释而不是在vb.net中我知道它很相似但似乎我可以得到它我不知道为什么
所以我的问题:如何在这个类中实现IDisposable
Public Class Container
Private _sItemName As String
Private _sPrice As Single
Private _sPriceTot As Single
Private _iNumber As Integer
Sub New(ByVal _sItemName As String, ByVal _sPrice As Single, ByVal _sPriceTot As Single, ByVal _iNumber As Integer)
Me._sItemName = _sItemName
Me._sPrice = _sPrice
Me._iNumber = _iNumber
Me._sPriceTot = _sPriceTot
End Sub
Public Property sItemName() As String
Get
Return _sItemName
End Get
Private Set(value As String)
_sItemName = value
End Set
End Property
Public Property sPriceTot() As Single
Get
Return _sPriceTot
End Get
Private Set(value As Single)
_sPriceTot = value
End Set
End Property
Public Property sPrice() As Single
Get
Return _sPrice
End Get
Private Set(value As Single)
_sPrice = value
End Set
End Property
Public Property iNumber() As String
Get
Return _iNumber
End Get
Private Set(value As String)
_iNumber = value
End Set
End Property
End Class
在有人问我想要做的事情之前,就像c ++中的.delete一样吗
答案 0 :(得分:7)
通过添加以下内容指定您的类实现IDisposable:
Public Class Container : Implements IDisposable
按Enter键,系统会自动为您添加处理方法:
#Region "IDisposable Support"
Private disposedValue As Boolean ' To detect redundant calls
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: dispose managed state (managed objects).
End If
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
' TODO: set large fields to null.
End If
Me.disposedValue = True
End Sub
' TODO: override Finalize() only if Dispose(ByVal disposing As Boolean) above has code to free unmanaged resources.
'Protected Overrides Sub Finalize()
' ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
' Dispose(False)
' MyBase.Finalize()
'End Sub
' 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(disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
然后只需在TODO部分中添加适当的代码
答案 1 :(得分:2)
通常,如果该类的实例将 - 或者可能 - 知道应该在Universe的生命周期内的某个时间执行某些操作,并且还知道它们是,那么类将实现IDisposable
可能是具有执行这些行动所必需的知识和动力的唯一事物。调用Dispose
是告诉这样一个类实例的一种方式“如果你想确保某些事情完成,这是你最后的机会”。
当一个类要求某些外部实体代表它做某事而损害其他对象或实体时,会出现这种模式的最常见用法,直到另行通知为止[例如,封装文件的类可能会要求底层操作系统对文件进行独占访问,从而损害可能要使用它的任何其他程序。在类上调用Dispose
将导致它通知文件系统它不再需要该文件,因此可以将其提供给其他实体。
通常,如果在不调用IDisposable
的情况下放弃实现Dispose
的对象,那么应该完成的一些事情将不会发生。 .NET中有一种机制,如果系统注意到它们已被放弃,对象可以请求通知,并且一些对象将这种机制用作“后备”,以防它们被丢弃而没有被正确处理。然而,这种机制有一些非常严重的限制;一个人不应该依赖它,除非一个人特别详细地了解它在一个特定情况下的行为。