0

何时创建和销毁共享(静态)变量。例如看看下面的代码:

 Imports System.Data.SqlClient
 Public Class Form1

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Person.testCon = New SqlConnection
            Person.Age = 30
            Dim p1 As Person
        End Sub
    End Class

Imports System.Data.SqlClient
    Public Class Person
        Public Shared testCon As SQLConnection
    End Class

在创建 Person 的第一个实例之前,可以从 Form_Load 访问 testCon 变量。我意识到将连接作为共享变量可能不是一个好习惯,但我想表达我的观点。我还想知道如果变量是原始变量(例如示例中的 Person.Age),何时创建和销毁变量

4

1 回答 1

0

根据Microsoft的说法,共享变量在您的应用程序的长度内有效。

但是,对象类型变量只有在您告诉它们时才会被实例化。

您可以通过创建一个新的测试类来验证此行为:

Public Class Class1
    Sub New()
        System.Diagnostics.Debug.Fail("Class Created")
    End Sub
End Class

然后为这个类创建一个共享变量作为另一个类的成员变量:

Private Shared m_TestClass As Class1

如果不访问共享变量,则不会执行 Debug.Fail 语句。然而,一旦你实例化这个类并分配它,它就会被触发(就像任何其他对象一样):

    m_TestClass = New Class1

共享变量一直存在,直到它们所在的 AppDomain 被卸载。

您还可以通过使用类似的 Debug.Fail 语句向测试类添加 Finalize 语句来测试这一点。

生命周期是在为对象类型共享变量分配新值时应该使用SyncLock的原因之一。

于 2012-07-21T19:05:01.407 回答