Vb.net 处置和不处置的区别

Vb.net 处置和不处置的区别,vb.net,Vb.net,这里我使用Dispose(Mycmd.Dispose())清除对象。我可以在这里使用Nothing(Mycmd=Nothing?)吗?哪一个是最好的 请帮帮我,先生 借 阿鲁尔。没有。什么都没有()方法来释放对象资源。您可以使用dispose和nothing来释放对象资源。但是,在实现IDisposable接口时,将使用dispose。如果您使用的是自定义类,则.net内置对象已具有此功能,但如果您的对象引用了此功能,则该功能将正常工作,否则将出现错误。您可以使用 命令=无 对于所有对象,无论是

这里我使用Dispose(Mycmd.Dispose())清除对象。我可以在这里使用Nothing(Mycmd=Nothing?)吗?哪一个是最好的

请帮帮我,先生

阿鲁尔。

没有。什么都没有()方法来释放对象资源。您可以使用dispose和nothing来释放对象资源。但是,在实现IDisposable接口时,将使用dispose。如果您使用的是自定义类,则.net内置对象已具有此功能,但如果您的对象引用了此功能,则该功能将正常工作,否则将出现错误。您可以使用

命令=无


对于所有对象,无论是.net framework还是自定义。都发布对象。

如果您的意思是不对对象赋值,如下所示:

 **Public Sub ExecuteQuery(ByVal pQueryString As String, Optional ByVal pConn As Odbc.OdbcConnection = Nothing)

            Dim Mycmd As New Odbc.OdbcCommand(pQueryString, MyConn)
            Mycmd.ExecuteNonQuery()
            Mycmd.Dispose()

    End Sub**
实际上,这在作为对象准备进行垃圾收集或释放对象的已用资源方面没有任何作用

在VB6中,将对象设置为等于零是释放对象资源的正确方法,但现在调用Dispose方法是正确的。如果对象未实现IDisposable,则可以将其保留

垃圾收集将在自己的时间发生(甚至没有调用.Dispose())

此命令将新Odbc.OdbcCommand(pQueryString,MyConn)创建的对象的引用存储到Mycmd中,即Mycmd基本上具有新创建对象的地址

现在当你这么做的时候

Dim Mycmd As New Odbc.OdbcCommand(pQueryString, MyConn)
Mycmd.Dispose()
然后,它表示新创建的对象的使用已经结束,分配给该对象的空间可以在垃圾收集期间释放

但当你这么做的时候

Dim Mycmd As New Odbc.OdbcCommand(pQueryString, MyConn)
Mycmd.Dispose()

然后,它只是从Mycmd中删除新创建对象的引用,并不将其标记为垃圾收集。

通常,.net对象会要求其他实体(可能在同一台计算机上,也可能不在同一台计算机上)执行“操作”(*)这些对象应实现IDisposable及其IDisposable。Dispose例程应通知任何和所有代表它们做某事的实体停止这样做。如果对IDisposable对象的所有引用都将随如果不先调用Dispose,其他一些实体可能会永远代表一个早已不存在的对象做一些无用的事情

(*)“做点什么”可以是任何内容,包括阻止执行某些操作的其他请求。例如,一个对象可能会要求操作系统以独占方式访问某个文件,而操作系统可能会将该请求中继到另一台计算机。如果该对象在不再需要访问该文件时不通知操作系统,则服务器可能会将其他所有人留在服务器中宇宙无限期地被锁定在文件之外


为了尽量减少实体永久性地代表被放弃的对象而产生的问题,.net提供了一种方法,对象可以通过该方法在被放弃时请求得到通知。如果覆盖object.Finalize()的对象被放弃,则.net通常会调用该对象对Finalize()的覆盖方法。这种分类基本上是可行的,但几乎不应该依赖它。很难设计一个类,使Finalize()总是做正确的事情,而从不做错误的事情。除此之外,如果不小心,.net可能会调用Finalize()在它确定要放弃的对象上,即使该对象正在与外部实体交互。在正确调用该对象上的Dispose的代码中永远不会发生这种情况,但在依赖Finalize()的代码中可能会发生这种情况。

真的有.Nothing()吗方法,还是将对象设置为零?这里对您的问题进行了一些很好的讨论:相关:在.Net中,这是不正确的,将对象设置为零不会释放其资源。好的,谢谢,先生。另一个疑问,先生。我创建了一个Dll文件。该文件有更多功能。我在项目中使用了该Dll等等。我为Globaly.Ex public fun创建了一个对象作为新的mycontrols.functions。我正在所有形式中使用fun变量。这是否正确。好的,谢谢你,先生。另一个疑问,先生。我创建了一个Dll文件。该文件有更多的函数。我在我的项目中使用了该Dll。我为Globaly.Ex public fun创建了一个对象作为新的mycontrols.functions。我正在以各种形式使用fun变量。这是否正确。我已经完全理解了。现在只有我澄清了这个疑问。非常感谢先生。