这可能是一个重复的问题,但我没有在网上得到它。我有一个函数,返回类型是数据表。
Function a() returns datatable
Dim DtLocLiecence as datatable
try
--- in this part i get value in the datatable
--and i am now returning datatable
return DtLocLiecence
catch ex
finally
DtLocLiecence = nothing
end try
end function
现在我们知道datatable是一种意味着的引用类型 对象a = 1 对象b 如果我们写b = a 然后a的参考被保存在b
中所以在这种情况下,当我返回datatable对象时,最后如果我写了datatable对象=什么,那么为什么我的返回数据表对象没有得到任何东西。 我得到了正确的结果,但我的问题是,如果数据表对象引用类型,那么为什么我的数据表最终没有得到任何结果。
答案 0 :(得分:1)
因为在将本地引用设置为null时已经返回了该值。或许将其想象如下可能会帮助您理解正在发生的事情,在假设的语言中,函数的返回值在其参数列表中指定:
Function a(ReturnValue result as datatable)
Dim DtLocLiecence as datatable
try
--- in this part i get value in the datatable
--and i am now returning datatable
result = DtLocLiecence
return
catch ex
finally
DtLocLiecence = nothing ' No effect on result
end try
end function
答案 1 :(得分:1)
考虑一下。执行DtLocLiecence = nothing
时,您将使DtLocLiecence
无效,而不是实际的DataTable对象。还有一个对实际DataTable的引用可能不那么明显,即函数本身(通过Return
语句),它使DataTable不会超出范围,因此被GC收集。