【问题标题】:VB.NET Static Constructor Not Called in DLL未在 DLL 中调用 VB.NET 静态构造函数
【发布时间】:2013-02-21 09:32:51
【问题描述】:

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

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

我的理解是在应用运行的时候会调用Shared Constructor?

【问题讨论】:

    标签: .net vb.net oop inheritance


    【解决方案1】:

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

    您无法知道共享构造函数将被调用的确切时刻,并且您不应该对此做出假设,但 MSDN 确保以下几点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2011-05-08
      • 2011-09-17
      • 2013-03-05
      • 2012-07-16
      • 1970-01-01
      相关资源
      最近更新 更多