【问题标题】:The type initializer threw an exception for one of my modules?类型初始化程序为我的一个模块引发了异常?
【发布时间】:2014-05-12 15:43:19
【问题描述】:
Module Upgradesupport
Friend RegistryFncs_definst as new registryFncs
Friend AccessApplication_definst As New Access.Application
Friend RDOrdoEngine_definst As New RDO.rdoEngine
Friend DAODBEngine_definst As New DAO.DBEngine    
end module

这是该模块的所有代码。它在使用它的表单加载时引发异常(即在调用模块时)我不知道是什么导致了问题,但它可能是第三行或第四行。

【问题讨论】:

  • 尝试将该块放入Try/Catch 以确定哪条线路失败
  • 我无法在没有错误的情况下向模块添加 try/catch(语句不能出现在方法主体之外)
  • 确认——我的错!摆脱他们每个人的 NEW,并添加行以在其他地方初始化它们,在某些相关类的构造函数中可能
  • 对不起,我没有完全按照我在其他地方初始化它们的部分,会不会像 DAODBEngine_definst = ... ?
  • 是的:DAODBEngine_definst = New DAO.DBEngine 很难建议 在哪里 这样做,在某些可能使用它们的类的 Sub New 中。

标签: vb.net exception types module initializer


【解决方案1】:

从创建实例中拆分声明,如下所示:

Module Upgradesupport
    Friend RegistryFncs_definst as registryFncs
    Friend AccessApplication_definst As Access.Application
    Friend RDOrdoEngine_definst As RDO.rdoEngine
    Friend DAODBEngine_definst As DAO.DBEngine    
End Module

删除New 会将其缩小为程序集范围的声明。然后在一些相关的类中,最符合逻辑的是在构造函数中:

 Public Class SomeRelatedClass
    Public Sub New
        ' initialize objects
        RegistryFncs_definst = New registryFncs
        AccessApplication_definst  = New Access.Application
        RDOrdoEngine_definst = New RDO.rdoEngine
        DAODBEngine_definst = New DAO.DBEngine  

        ' other stuff you need
    End Sub  

如果您的应用从 Sub Main 而不是主窗体开始,您可以在 Sub Main 中进行初始化:

Public Sub Main
    ' initialize objects
    RegistryFncs_definst = New registryFncs
    AccessApplication_definst  = New Access.Application
    RDOrdoEngine_definst = New RDO.rdoEngine
    DAODBEngine_definst = New DAO.DBEngine
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多