2011-01-06 89 views
0

我有以下代碼:共享/靜態變量應該什麼都不是 - 給出了什麼?

Public Class TestClass 
    Public Sub Main() 
     If theGlobal IsNot Nothing Then Throw New Exception("What gives!") 
    End Sub 

    Private Shared theGlobal As Object = Nothing 
    Private Shared ReadOnly Property Global 
     Get 
      If theGlobal Is Nothing Then 
       theGlobal = New Object() 
      End If 

      Return theGlobal 
     End Get 
    End Property 
End Class 

很爲難......爲什麼theGlobal對象沒有什麼?

+0

你可以顯示運行Test()方法的代碼嗎?具體來說,在這段代碼之前的所有內容都會很好。 – NotMe 2011-01-06 19:35:34

+1

這段代碼沒有意義。簡單地改變私人共享theGlobal As Object = New Object(),並移除如果theGlobal部分將解決所有的麻煩。 – HABJAN 2011-01-06 19:39:20

+0

這是一段愚蠢的代碼,只是爲了重現這種情況。但是@Jon是對的,我在調試器中,在我的「Watch」窗口中我擁有該屬性 - 只是沒有意識到它,因爲Watch窗口被隱藏,我正在查看「Locals」和「Immediate」窗口。 – Denis 2011-01-06 22:14:51

回答

5

假設這確實是你的代碼,我猜測你是在調試器中用斷點運行它,並且監視窗口正在評估該屬性,該屬性正在初始化theGlobal

只是一個猜測,根據我以前見過的類似情況。

如果這沒有幫助,請嘗試編寫一個簡短但完整的控制檯應用程序,它可以重現問題,並且我們都可以運行。

3

我認爲你的意思

If Global Is Nothing Then Throw New Exception("What gives!") 

你必須訪問全局屬性字段進行初始化,根據你的代碼。

相關問題