2

このような2つのクラスを持つVB.NETプロジェクトがあります。別のプロジェクトDLLに含まれている1つのベースと1つの派生。

Public Class BaseClass
    Public Shared label_ As String
End Class

Public Class Derived
    Inherits BaseClass

    Shared Sub New()
        BaseClass.label_ = "Some Label"
    End Sub

    Public Shared Sub Dump()

    End Sub
End Class

そして、私が作成したこのコードをテストするために

Sub Main()

    'Shared label is Nothing here?
    Console.WriteLine(Derived.label_)

    'Shared label is assigned here as shared constructor is called
    Derived.Dump()
    Console.WriteLine(Derived.label_)

End Sub

派生クラスの共有コンストラクターは、インスタンスメソッドを呼び出すか、他の静的メソッドを呼び出すときにのみ呼び出されることがわかりましたか?

私の理解では、アプリケーションの実行時に共有コンストラクターが呼び出されますか?

4

1 に答える 1

2

静的コンストラクターは、アプリケーションの実行時ではなく、最初のインスタンスが作成される前、または静的メンバーが参照される前に、クラスを初期化するために自動的に呼び出されます。

共有コンストラクターが呼び出される正確な瞬間を知ることはできません。それについて推測するべきではありませんが、MSDNは次の点を保証します。

  1. 共有コンストラクターは、クラスタイプのインスタンスが作成される前に実行されます。
  2. 共有コンストラクターは、構造体タイプのインスタンスメンバーにアクセスする前、またはstructure.Typeのコンストラクターが明示的に呼び出される前に実行されます。構造体用に作成された暗黙のパラメーターなしコンストラクターを呼び出しても、共有コンストラクターは実行されません。
  3. 共有コンストラクターは、タイプの共有メンバーのいずれかが参照される前に実行されます。
  4. 共有コンストラクターは、typeから派生する型がロードされる前に実行されます。
  5. 共有コンストラクターは、プログラムの1回の実行中に複数回実行されることはありません。
于 2013-02-21T09:34:52.493 に答える