请看下面的代码:
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Data.OracleClient
Public Class clsParameterValues
Implements IDisposable
Private paramValues(0) As DbParameter
Public Function AssignParameterValues(ByVal strParameterName As String, ByVal strParameterValue As String, ByVal intDatabaseType As Integer) As Integer
Dim intArrayBound As Integer
intArrayBound = UBound(paramValues)
If intArrayBound > 0 Then
ReDim paramValues(intArrayBound)
End If
If intDatabaseType = 1 Then
paramValues(intArrayBound) = New SqlParameter(strParameterName, strParameterValue)
ElseIf intDatabaseType = 2 Then
paramValues(intArrayBound) = New OracleParameter(strParameterName, strParameterValue)
'paramValues(intArrayBound) = New OracleParameter(":" & strParameterName, OracleType.Int32)
'paramValues(intArrayBound).Value = strParameterValue
End If
Return intArrayBound
End Function
Public Function getParameterValues() As DbParameter()
Return paramValues
End Function
Public Sub Dispose() Implements IDisposable.Dispose
Erase paramValues
paramValues = Nothing
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
网页功能如下所示:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim objParameterValues As New clsParameterValues
Using objParameterValues
'Use the objParameterValues class here.
End Using
objParameterValues=nothing
End Using
End Sub
Run Code Online (Sandbox Code Playgroud)
我IDisposable.Dispose在设置之前用来擦除数组Nothing.我认为这是不好的做法,因为Array类没有实现IDisposable.是否甚至需要擦除数组并将其设置为Nothing?(垃圾收集器是否涉及此问题?)
Public Sub Dispose() Implements IDisposable.Dispose
Erase paramValues
paramValues = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
Erase语句可以使用旧版Basic,即手动内存管理很有用的类型.不再,内存管理在.NET中是自动的.出于兼容性原因,仍然支持它.它所做的就是将数组引用设置为Nothing.所以你的代码相当于:
Public Sub Dispose() Implements IDisposable.Dispose
paramValues = Nothing
paramValues = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
所以没有意义.你永远不应该实现IDisposible将变量设置为Nothing,这不是接口的契约.可能永远不会再使用被处置物体.所以没有必要将数组引用设置为null,因为它实际上对垃圾收集堆上的实际数组对象没有任何作用.我不能看到你想要帮助的场景,任何clsParameterValues对象都应该有一个有限的生命周期.当您使数组引用为空时,它就不再有用了.
只需删除IDisposable实现.