2014-09-25 107 views
0

的我有以下的一个模块中声明(简化的举例):初始化阵列外部子程序

Public Structure ActiveDeviceInfo 
    Dim InStream As String 
    Dim InMsg() As String 
    Dim OutMsg() As String 

    Public Sub Initialize() 
     ReDim InMsg(30) 
     ReDim OutMsg(30) 
    End Sub 
End Structure 

然后右后,我创建该模块的实例。我需要它具有整个模块的范围,而不是单独的子例程。

Public ActiveRelay As New ActiveDeviceInfo 
ActiveRelay.Initialize() 

我得到错误的初始化调用“预计宣言”。
有关如何解决此问题的任何想法?

回答

2

你可以在静态构造函数添加它的模块:

Public Module Module1 
    Public ActiveRelay As New ActiveDeviceInfo 

    Sub New() 
     ActiveRelay.Initialize() 
    End Sub 

    'Struct Here 
End Module 
1

模块定义只是里面我会把:

Dim ActiveRelay As New ActiveDeviceInfo 

然后在单独的子程序只要致电:

ActiveRelay.Initialize() 

如果你想调用初始化一个对象被创建时,一个可以切换到一个具有构造函数的类。例如:

Dim ActiveRelay As New ActiveDeviceInfo 

Public Class ActiveDeviceInfo 
    Dim InStream As String 
    Dim InMsg() As String 
    Dim OutMsg() As String 

    Public Sub Initialize() 
     ReDim InMsg(30) 
     ReDim OutMsg(30) 
    End Sub 

    Sub New() 
     Initialize() 
    End Sub 
End Class 

这会运行New()w当这个类被实例化时。

+0

是的,但那么这将重新初始化数组,我期待更多的全局/静态的概念。 – 2014-09-25 23:37:18

+1

是否需要您将其创建为结构。作为一个类怎么样? – 2014-09-25 23:40:59

+0

不,不是必需的。我正在转换VB6代码,现在我只是试图让它工作,然后我会回头再重新考虑。 – 2014-09-25 23:42:26