2014-01-29 118 views
0

VB.NET 2010年,框架3.5Windows服務,創造一流的以「全球範圍」

問題/問題在Windows服務

準系統窗口服務全球範圍內有兩個默認類,1類和類2

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 Main替換了Sub OnStart,obj1隨處可見。所有其他類都可以看到obj1,直到流出Sub Main。

有誰知道如何解決這個問題?

回答

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 for more in在決定採取哪條路線之前形成隊列

+0

我試圖避免一個模塊(感覺就像VB6剩下的剩餘剩餘部分),但它對我所擁有的似乎最實用。 – Rose