共用方式為


共用 (Visual Basic)

指定一或多個宣告的程式設計專案與大型類別或結構相關聯,而不是與類別或結構的特定實例相關聯。

使用共享的時機

共用類別或結構的成員可供每個實例使用,而不是 非共用,其中每個實例都會保留自己的複本。 例如,如果變數的值套用至整個應用程式,共用就很有用。 如果您宣告該變數為 Shared,則所有實例都會存取相同的儲存位置,而且如果一個實例變更變數的值,則所有實例都會存取更新的值。

共用不會改變成員的存取層級。 例如,類別成員可以共用和私用 (只能從 類別內部存取),或非共用和公用。 如需詳細資訊,請參閱 Visual Basic中的存取層級

規則

  • 宣告內容。 您只能在模組層級使用 Shared 。 這表示元素的 Shared 宣告內容必須是類別或結構,而且不能是來源檔案、命名空間或程式。

  • 合併修飾詞。 您無法Shared在相同的宣告中指定 OverridesOverridableNotOverridable、MustOverrideStatic

  • 訪問。 您可以使用其類別或結構名稱來限定共享元素,而不是使用其類別或結構之特定實例的變數名稱來存取共用專案。 您甚至不需要建立類別或結構的實例,即可存取其共享成員。

    下列範例會呼叫 結構公開的Double共享程式IsNaN

    If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
    
  • 隱含共用。 您無法在 Const 語句中使用 Shared 修飾詞,但常數會隱含共用。 同樣地,您無法宣告模組或介面的成員為 Shared,但會隱含共用。

行為

  • 儲存空間。 共用變數或事件只會儲存在記憶體中一次,不論您建立其類別或結構多少個實例。 同樣地,共用程式或屬性只保留一組局部變數。

  • 透過實例變數存取。 藉由使用包含其類別或結構之特定實例的變數名稱來限定共享專案,即可存取共用元素。 雖然這通常如預期般運作,但編譯程式會產生警告訊息,並透過類別或結構名稱而非變數進行存取。

  • 透過實例表達式存取。 如果您透過傳回其類別或結構的實例的表達式存取共用專案,編譯程式會透過類別或結構名稱進行存取,而不是評估表達式。 如果您打算讓表達式執行其他動作,以及傳回 實例,則此存取會產生非預期的結果。 下列範例說明這種情況。

    Sub Main()
        ' The following line is the preferred way to access Total.
        ShareTotal.Total = 10
    
        ' The following line generates a compiler warning message and
        ' accesses total through class ShareTotal instead of through
        ' the variable instanceVar. This works as expected and adds
        ' 100 to Total.
        Dim instanceVar As New ShareTotal
        instanceVar.Total += 100
    
        ' The following line generates a compiler warning message and
        ' accesses total through class ShareTotal instead of calling
        ' ReturnClass(). This adds 1000 to total but does not work as
        ' expected, because the WriteLine in ReturnClass() does not run.
        Console.WriteLine("Value of total is " & CStr(ShareTotal.Total))
        ReturnClass().Total += 1000
    End Sub
    
    Public Function ReturnClass() As ShareTotal
        Console.WriteLine("Function ReturnClass() called")
        Return New ShareTotal
    End Function
    
    Public Class ShareTotal
        Public Shared Property Total As Integer
    End Class
    

    在上述範例中,編譯程式會在程式代碼透過 實例存取共用屬性 Total 時產生警告訊息。 在每個案例中,它會直接透過 類別 ShareTotal 進行存取,而且不會使用任何實例。 在預期呼叫程序 ReturnClass的情況下,這表示它甚至不會產生 對的呼叫 ReturnClass,因此不會執行顯示 「Function ReturnClass() 呼叫」 的額外動作。

Shared修飾詞可用於下列內容:

另請參閱