Share via


HOW TO:延長變數的存留期

更新:2007 年 11 月

通常當變數中宣告的程式設計項目不存在時,該變數即不再存在。但是,您可以利用 Static (Visual Basic) 關鍵字來宣告變數,讓變數的存留期 (Lifetime) 比其內含項目的存留期還要久。

如需詳細資訊,請參閱 Visual Basic 中的存留期

若要使變數的存留期的時間超過其內含項目的存留期

  • 如果變數為「區域變數」(於程序中宣告),則在宣告變數的 Dim 陳述式 (Visual Basic) 中加入 Static 關鍵字。如果靜態變數是在類別或模組所包含的程序中進行宣告,則變數的存留期與該類別或模組的存留期一樣長。

    如果是 Shared (Visual Basic) 程序內的區域變數,應用程式執行期間,程序及其變數都會存在。請不要在這種情況中使用 Static。

  • 如果變數為「成員變數」(Member Variable,在任何程序外的類別或結構中宣告),則在宣告的 Dim 陳述式 (Statement) 中加入 Shared 關鍵字。共用變數與其類別或結構的任何執行個體無關,應用程式執行期間都會存在。您無法在成員變數中使用 Static。

    如果成員變數是在模組中宣告,應用程式執行期間它都會存在。請不要在這種情況中使用 Shared。

範例

下列範例是使用 Static (Visual Basic) 關鍵字的變數宣告。(請注意,當 Dim 陳述式 (Visual Basic) 使用如 Static 的修飾詞時,不需使用 Dim 關鍵字)。

Function runningTotal(ByVal num As Integer) As Integer
    Static applesSold As Integer
    applesSold = applesSold + num
    Return applesSold
End Function

在前述範例中,在程序 runningTotal 傳回呼叫程式碼後,變數 applesSold 仍會繼續存在。下次呼叫 runningTotal 時,applesSold 會保留之前的計算值。

如果未使用 Static 宣告 applesSold,之前累積的值將不會跨 runningTotal 的呼叫而保留下來。下次呼叫 runningTotal 時,將重新建立 applesSold 並將其初始值設為 0,而且 runningTotal 只會傳回與這次呼叫相同的值。

編譯程式碼

您可以初始化靜態區域變數的值,當做宣告的一部分。如果您將陣列宣告為 Static,您可以初始化其陣序規範 (維度的數目)、每一個維度的長度和個別項目的值。

相同名稱的靜態變數

您可以在多個程序中以相同的名稱宣告靜態變數。如果這麼做,Visual Basic 編譯器會將此類變數視為個別項目。其中一個變數的初始化並不會影響其他變數的值。如果您要以一組多載來定義程序,並在每一個多載中以相同的名稱來宣告靜態變數,也可以套用這個方法。

靜態變數的包含項目

您可以在類別中宣告靜態區域變數,也就是在該類別的程序中宣告。但是您無法在結構中宣告靜態區域變數,不論是該結構中的結構成員,還是結構內程序中的區域變數,都無法宣告。

安全性

在前述範例中,您可以在模組層級中宣告 applesSold 以產生相同的存留期。但是如果您以這種方式變更變數範圍,程序就不能再獨佔該變數的存取權。因為其他程序也可存取 applesSold 並變更其值,累加值會可能會無法預期,而且程式碼會更難維護。

請參閱

概念

Visual Basic 中的存留期

宣告項目特性

Visual Basic 中的範圍

Visual Basic 中的存取層級

Visual Basic 中的變數

Visual Basic 中的變數宣告

程序多載化