在创建对象的新实例之前将 Object 设置为 Nothing?

Posted

技术标签:

【中文标题】在创建对象的新实例之前将 Object 设置为 Nothing?【英文标题】:Set Object to Nothing before creating a new instance of object? 【发布时间】:2015-04-23 18:03:57 【问题描述】:

在 VBA 中,在声明对象的新实例之前将对象设置为 Nothing 是否是一种好习惯?

例如:

Private Sub SetupConn()

Const Provider As String = "sqloledb"
Const LanDataSource As String = "127.0.0.1"
Const WanDataSource As String = "mail.12345678.biz:12345"

Dim UserName As String
Dim Password As String

UserName = "myusername"
Password = "mypassword"

这是我想知道是否应该关闭 连接或在重新打开新连接之前将其设置为空。

Set mDBconn = New ADODB.Connection

Select Case mConnMethod
Case WAN
    mConnStr = "Provider='" & Provider & ";Data Source=" & WanDataSource _
             & ";User ID=" & UserName & ";Password=" & Password
Case Lan
    mConnStr = "Provider='" & Provider & ";Data Source=" & LanDataSource _
             & ";User ID=" & UserName & ";Password=" & Password
End Select
End Sub

场景是用户在路上,使用移动数据连接,他到达办公室,想要直接进入高速 wifi 连接,而无需关闭和重新打开程序。在这种情况下,我要做的是将连接方法设置为 LAN 并使用重置参数调用此子。

【问题讨论】:

在 VBA 中不确定,但如果您使用新引用设置变量,旧的引用将被覆盖并被垃圾收集器捕获,因为不再使用。 这也是我将其标记为 ADODB 的部分原因,我不知道在不关闭它的情况下将对象设置为空是否有任何危害。 那么,最好等待更了解adodb模型的人。我知道以上内容,但我不确定,所以不想传播错误的信息。暂时小心。 Is there a need to set Objects to Nothing inside VBA Functions 的可能重复项。 我想我的部分问题是关于这与关闭 ADODB 连接有何关系。 【参考方案1】:

我猜根据这个Whats the difference between rs.close vs rs = nothing in a RecordSet, 关闭和设置任何内容都很好。这回答了我的问题。

【讨论】:

以上是关于在创建对象的新实例之前将 Object 设置为 Nothing?的主要内容,如果未能解决你的问题,请参考以下文章

类方法实例方法和静态方法

原型模式

在刷新之前保存瞬态实例,或者将属性的级联操作设置为使其自动保存的内容

uni-app动态添加根级别的响应式属性

JSON文件学习(jsoncjson-c)(不要学这个,去学cJSON)

如何创建对象的新实例并将其传递到数组 SwiftUI