2014-04-30 231 views
0

我想在Visual Studio中設置一個全局變量,但是我無法將其設置爲靜態。有沒有辦法讓我將變量設置爲靜態,並通過不同的方法共享它,或者每次改變時都保存變量?聲明全局靜態變量

+0

在VB.NET中靜態是'Shared'。以這種方式調用它:'ClassName.SharedVariableName'。它必須是「公開」的,可以從課外訪問。請注意,您不是隻通過方法共享它,而是跨不同線程共享,這可能導致鎖定或不正確的結果(在ASP.NET中爲f.e.)。 –

+0

感謝您保證「共享」是靜態的。看來我在工作中面臨運行時錯誤,或者正在使用「共享」形式的變量。你能給我舉個例子嗎? – user3568182

+0

你能發佈你的代碼嗎 –

回答

3

你有兩個選擇:

1 - 創建一個包含共享變量(這是在C#中相同的靜態變量)

Public Class GlobalVariables 
     Public Shared Bar As String 
    End Class 

然後,您可以使用類名訪問這一類:

GlobalVariables.Bar = "Hello world" 

2 - 創建模塊(這是類似於在c#靜態類)

Public Module GlobalVariables 
     Public Bar As String 
    End Module 

然後,可以在代碼訪問該值是這樣的:

Bar = "Goodbye cruel world" 
+0

我所做的就是將Shared變量放在與所用方法相同的類中,並將其稱爲不帶類名的變量名。在classname.variablename中,因爲它在同一個類中。這可能是錯誤嗎?另外,我是否會像找到按鈕點擊功能一樣使用方法? – user3568182

0

如果使用由@馬特Wilko呈現的數字1選項,則可以通過類的對象實例或者引用共享構件通過引用沒有對象引用的類。兩者都指向並遞增相同的變量,因此引用相同的值。儘管Visual Studio編譯器提供了一個關於引用對象實例的警告,並說它不會被評估,但它仍然會編譯。編譯器的建議是使用類名。

Public Class GlobalVariables 
    Public Shared Foo As Integer 
End Class 

將以下到表單,並調用從按鈕單擊事件過程IncrementIntegers(),你會發現,myGlobalVariables.Foo和GlobalVariables.Foo都返回20

Private Sub IncrementIntegers() 
    Dim myGlobalVariables As New GlobalVariables 
    myGlobalVariables.Foo = 0 
    GlobalVariables.Foo = 0 
    myGlobalVariables.Foo += 10 
    GlobalVariables.Foo += 10 
    Dim iLocalInt1 = myGlobalVariables.Foo 
    MessageBox.Show("myGlobalVariables.Foo = " & iLocalInt1.ToString) 
    Dim iLocalInt2 = GlobalVariables.Foo 
    MessageBox.Show("GlobalVariables.Foo = " & iLocalInt2.ToString) 
End Sub 

注意與選項1,Foo必須使用類名稱或對象名稱進行限定。使用選項2,它是一個模塊而不是一個類,因此無法創建對象引用。公共變量可以被引用而不用模塊名限定它,除非具有相同名稱的變量出現在另一個模塊中,在這種情況下,編譯器會拋出名稱衝突錯誤。例如,

Public Module1 

    Public Foo As String 

End Module 

Public Module2 

    Public Foo As String 

End Module 

刪除Module2和Foo可以從任何地方調用unqualified。

Foo = "Happy birthday" 

隨着單詞數本,富必須與名被定爲都指向不同的可變和代表不同的和獨立的值。

Module1.Foo = "Goodbye cruel world" 
Module2.Foo = "Hello new world" 
+0

這已經得到解答,謝謝大家。 – user3568182