VB.NET 2010,Framework 3.5
Windows服务中全局范围的问题/问题
Barebones Window Service,带有两个默认类Class1和Class2
Class1看起来像这样。
Public Class Class1
Public Hi As String = "Hi"
End Class
下面的主要服务类'OnStart'。 obj1看起来应该具有全局范围
Public Class Service
Public obj1 As New Class1 ' need obj1 to have global scope
Protected Overrides Sub OnStart(ByVal args() As String)
End Sub
End Class
但是,尝试访问Class2中的全局obj1会生成错误“obj1未声明。由于其保护级别可能无法访问”
Public Class Class2
Public Sub SayHi()
MsgBox(obj1.Hi) ' error here, obj1 is out of scope
End Sub
End Class
在Sub Service取代Sub OnStart的非服务应用中,obj1随处可见。所有其他类都可以看到obj1,直到流出Sub Main。
有谁知道怎么解决这个问题?
答案 0 :(得分:2)
如果Sub Main在模块中,这仅适用于非服务应用程序。
最佳解决方案可能是创建一个包含共享成员的单独类
Public Class CommonObjects
Public Shared obj1 As New Class1
End Class
然后你可以像这样使用obj1:
Public Class Class2
Public Sub SayHi()
MsgBox(CommonObjects.obj1.Hi)
End Sub
End Class
或者只是创建一个模块并在其中放置Public obj1 As New Class1
以使用该对象,而无需指定完全限定名称
在决定选择哪条路线
之前,请参阅此问题的答案Classes vs. Modules in VB.NET以获取更多信息