2

我有一个 VB.NET 项目,它有 2 个这样的类。一个 Base 和一个派生,包含在单独的项目 DLL 中。

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. 共享构造函数在访问结构类型的任何实例成员之前运行,或者在显式调用结构类型的任何构造函数之前运行。调用为结构创建的隐式无参数构造函数不会导致共享构造函数运行。
  3. 共享构造函数在引用任何类型的共享成员之前运行。
  4. 共享构造函数在从该类型派生的任何类型加载之前运行。
  5. 在程序的单次执行期间,共享构造函数不会运行多次。
于 2013-02-21T09:34:52.493 回答