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

testCon 変数は、Person の最初のインスタンスが作成される前に Form_Load からアクセスできます。接続を共有変数として使用するのはおそらく良い習慣ではないことを認識していますが、私の主張を理解したいと思っています。また、変数がプリミティブである場合 (例の 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を使用する必要がある理由の 1 つは、有効期間です。

于 2012-07-21T19:05:01.407 に答える