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

时间:2013-02-21 09:32:52

标签: .net vb.net oop inheritance

我有一个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

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

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

1 个答案:

答案 0 :(得分:2)

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

你无法知道调用共享构造函数的确切时刻,你不应该对它做出假设,但MSDN确保这些点:

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