VB.NET 允許在程序內部使用 Static 關鍵字宣告變量,其生命週期延長至應用程式存續期間,且保持值不隨程序結束而銷毀:
Public Sub Test1()
Static i As Integer
i += 1 ' 實現程序呼叫計數器
End Sub
C# 的 static 僅能用於類別層級,若需同樣功能,必須宣告類別欄位,但這會破壞封裝性,讓其他方法也能存取該計數器。VB.NET 的設計更符合「區域性狀態」的語意。
反編譯 IL 可見,VB 編譯器將局部靜態變量轉換為類別的私有欄位,命名模式為 $STATIC$MethodName$ID$VarName,並標記 specialname,使原始碼無法直接存取:
.field private specialname int32 $STATIC$Test1$2001$i
存取指令仍為 ldfld/stfld,與一般欄位無異,但編譯器限制了可見範圍,完美模擬局部靜態語意。
Interlocked.Increment 或鎖)。Static(區域靜態)與 Shared(類別靜態)兩關鍵字區分語意,C# 僅用 static。