Visual Basic 中的存留期
更新:2007 年 11 月
宣告項目的「存留期」(Lifetime) 是指可以使用該項目的一段時間。變數是唯一擁有存留期的項目。因此,編譯器會將程序參數和函式傳回的內容視為是變數的特殊案例。變數的存留期代表它可保留一個值的期間。過了變數的存留期後,它的值可能會改變,但它永遠會保留某個值。
不同的存留期
「成員變數」(Member Variable,在任何程序以外宣告的模組層級變數) 的存留期通常會與宣告該變數的項目相同。在類別或結構中宣告的非共用變數,是供宣告該變數的類別或結構執行個體 (Instance) 所使用。這類的變數的存留期與其執行個體相同。但是,Shared 變數只有一個存留期,可在應用程式執行的整個期間延續。
「區域變數」(於程序內宣告) 只有在宣告該變數的程序執行時才存在。該程序的參數與任何函式傳回的內容也是如此。但是,如果該程序呼叫其他程序,區域變數在受呼叫程序執行時將保留它們的值。
存留期的開始
當控制權進入宣告區域變數的程序時,區域變數的存留期即開始。只要程序一開始執行,每個區域變數就會初始化為所屬資料型別的預設值。當程序進行到指定初始值的 Dim 陳述式 (Statement) 時,會將這些變數設定為初始值,即使程式碼已指派了其他值也一樣。
結構變數中的每一個成員都會被視為個別的變數加以初始化。同樣地,陣列變數中的每一個項目也都會分別被初始化。
在程序內區塊 (例如 For 迴圈) 中宣告的變數,在進入程序時會進行初始化。無論您的程式碼是否執行該區塊,都會執行初始化。
存留期的結束
當程序結束時,不會保留其區域變數的值,而且 Visual Basic 會回收這些變數使用的記憶體。當您下次呼叫此程序時,會從頭開始建立所有區域變數並將之重新初始化。
當類別或結構的執行個體結束時,非共用變數就會從記憶體移除並失去值。每次建立類別或結構的新執行個體時,會建立非共用變數並將之重新初始化。不過,Shared 變數會保存至應用程式停止執行為止。
存留期的擴充
如果您使用 Static 關鍵字宣告區域變數,該變數的存留期會比程序的執行時間來得長。下表顯示程序宣告如何判斷 Static 變數的存在時間。
程序位置及共用與否 |
靜態變數存留期開始 |
靜態變數存留期結束 |
---|---|---|
在模組中 (依預設共用) |
第一次呼叫程序時 |
當應用程式停止執行時 |
在類別或結構中,Shared (程序不是執行個體成員) |
第一次以特定執行個體或以類別或結構的名稱呼叫程序時 |
當應用程式停止執行時 |
在類別或結構中,非 Shared (程序為執行個體成員) |
第一次以特定執行個體呼叫程序時 |
當執行個體釋出以進行記憶體回收 (GC) 時 |