在这个 VB.NET 代码中:
Dim o as SomeClass
Try
o = new SomeClass
'call some method on o here
Catch(...)
...
Finally
o = Nothing
End Try
为什么需要将 o 设置为Nothing
?如果我不将其设置Nothing
为Finally
块怎么办?我认为如果你不设置它是可以的,Nothing
因为该对象将被标记为 GC。
在这个 VB.NET 代码中:
Dim o as SomeClass
Try
o = new SomeClass
'call some method on o here
Catch(...)
...
Finally
o = Nothing
End Try
为什么需要将 o 设置为Nothing
?如果我不将其设置Nothing
为Finally
块怎么办?我认为如果你不设置它是可以的,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
出于习惯将东西设置为我认为不正确和糟糕的代码设计
这是因为在 try..catch..finally 块之外使用该对象是不安全的。不能保证它处于一致状态,因此将其设置为 Nothing 以表明不应该使用 t。