vb.net - 为什么要在 Finally block 中将对象设置为 Nothing?

标签 vb.net object try-catch-finally nothing

在此 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/

相关文章:

java - 异常处理 : Getting different output in each run for same code

java - 如何从 finally 子句中抛出在 catch 子句中捕获的异常?

java - "finally"子句在异常处理中的好处

mysql - 如何使用vb.net和adodb连接在mysql数据库中插入图像

c++ - 为什么在 VB.NET 中使用 DeviceIoControl 的文件枚举比在 C++ 中更快?

javascript - 从数组创建对象数组

c# - DBNull怎么可能不等于DBNull

数组中的 JavaScript 对象

c# - 为什么是 String.IsNullOrEmpty(str) 而不是 str.IsNullOrEmpty()?

vb.net - 在 Visual Basic 中如何检查字符串是否在数组内?