VB 中 Static 與 Shared 的不同
首先,我們來看MSDN對兩者的解釋:
Static : 指定一或多個宣告的區域變數仍會存在,並在宣告它們的程序終止之後保持其最新的值。(這在C#找不到相對應的關鍵字)
Shared : 指定一或多個宣告的程式設計項目(declared programming elements)會與整個類別或結構產生關聯,而不是與類別或結構的特定執行個體 (Instance) 產生關聯。(這等同於C#中的static關鍵字)
由此,我們可以知道 static 只能宣告在 區域變數 , 而shared則是用在類別或結構中的成員。
再來,我們來看下面這段程式:
Public Class Form1
Function updateStaticSales(ByVal thisSale As Integer) As Integer
Static staticTotalSales As Decimal = 0
staticTotalSales += thisSale
Return staticTotalSales
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.Items.Add(Convert.ToString(ListBox1.Items.Count + 1) + "->" + Convert.ToString(New shareTotal().updateStaticSales(10)))
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox2.Items.Add(Convert.ToString(ListBox2.Items.Count + 1) + "->" + Convert.ToString(updateStaticSales(10)))
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click, ListBox3.Click
ListBox3.Items.Add(Convert.ToString(ListBox3.Items.Count + 1) + "->" + Convert.ToString(New shareTotal().updateSharedSales(10)))
End Sub
End Class
Public Class shareTotal
Shared sharedTotalSales As Integer = 0
Function updateSharedSales(ByVal thisSale As Integer) As Integer
sharedTotalSales += thisSale
Return sharedTotalSales
End Function
Function updateStaticSales(ByVal thisSale As Integer) As Integer
Static staticTotalSales As Integer = 0
staticTotalSales += thisSale
Return staticTotalSales
End Function
End Class
在Button1_Click中,由於每次我們都產生一個新的shareTotal的執行個體,因此shareTotal中的updateStaticSales函數中的區域變數staticTotalSales 每次都會被賦予初始值0。
在Button2_Click中,由於每次我們都是在同一個Form1的執行個體,因此Form1中的updateStaticSales函數中的區域變數staticTotalSales會被保留最後的值。
在Button3_Click中,即便每次我們都產生一個新的shareTotal的執行個體,然而shareTotal中的成員變數sharedTotalSales 的值並不會因此被賦予初始值0。-
程式執行的結果: