未在DLL中调用VB.NET静态构造函数



我有一个VB.NET项目,它有两个类似的类。一个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

我发现只有当我调用实例方法或调用任何其他静态方法时,才会调用派生类中的共享构造函数?

我的理解是,共享构造函数是在应用程序运行时调用的?

在创建第一个实例或引用任何静态成员之前,而不是在运行应用程序时,会自动调用静态构造函数来初始化类。

你不知道共享构造函数将被调用的确切时刻,你不应该对此做出假设,但MSDN确保了这一点:

  1. 共享构造函数在类类型的任何实例运行之前运行创建
  2. 共享构造函数在访问结构类型的任何实例成员之前运行,或在访问结构的任何构造函数之前运行。类型被显式调用。调用为结构创建的隐式无参数构造函数不会导致共享构造函数运行
  3. 共享构造函数在类型的任何共享成员之前运行被引用
  4. 共享构造函数在加载从该类型派生的任何类型之前运行
  5. 在单个程序的执行

最新更新