在此 VB.NET 代码中:
Dim o as SomeClass
Try
o = new SomeClass
'call some method on o here
Catch(...)
...
Finally
o = Nothing
End Try
为什么需要将 o 设置为 Nothing
?如果我不在 Finally
block 中将它设置为 Nothing
会怎样?我认为如果您不将其设置为 Nothing
也没关系,因为该对象将被标记为 GC。
最佳答案
如果在 try catch 之外使用对象是不安全的,应该这样做。例如,如果这是一个流,您会看到该流关闭然后设置为空。这并不总是正确的做法,但这段代码经常出现。
考虑这段代码
Sub Main()
Dim o As String
Try
o = "Hello"
Console.Out.WriteLine("hi {0}", o)
Catch ex As Exception
' do something here
Finally
o = Nothing
End Try
' unable to do something here
End Sub
尽管这是一个愚蠢的例子,但它确实意味着您现在不能在外部引用 o,因为它不再设置为对象的实例。这就是为什么很多人都这样做的原因。如果你在一个函数中并且函数在那个点结束,则不需要设置为 Nothing 因为对象超出范围但是很多人会出于习惯将东西设置为 Nothing
我认为不正确和糟糕的代码设计
关于vb.net - 为什么要在 Finally block 中将对象设置为 Nothing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009297/