[Visual Basic 2003~2005開發秘訣與範例大全] VB 中 Static 與 Shared 的不同

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。-

 

程式執行的結果:

 

 

更多關於 staticshared 關鍵字