其他答案涉及静态的 C# 用法,因此我将Static
在 VB.NET 中讨论,因为您参考了一篇关于它的 MSDN 文章。当您在 VB.NET 中创建静态局部变量时,编译器会将其转换为类级变量,该变量只能由在代码中声明变量的函数中的代码引用。所述变量是实例还是共享取决于包含函数。例如,这段代码:
Public Class StaticTest
Public Function Process(value As Integer) As Integer
Static lastValue As Integer
Dim result As Integer
If value > 0 Then
result = value
lastValue = value
Else
result = lastValue
End If
Return result
End Function
End Class
反编译成这样的:
Public Class StaticTest
' Methods
<DebuggerNonUserCode> _
Public Sub New()
End Sub
Public Function Process(ByVal value As Integer) As Integer
If (value > 0) Then
Dim result As Integer = value
Me.$STATIC$Process$20188$lastValue = value
Return result
End If
Return Me.$STATIC$Process$20188$lastValue
End Function
' Fields
Private $STATIC$Process$20188$lastValue As Integer
End Class
我注意到,如果我在函数入口处设置lastValue
为value
,编译器还会创建某种初始化代码和额外的字段,因此在某些情况下Static
本地人确实会生成一些额外的代码。
我建议避免使用Static
本地变量,因为与替代方法相比,我发现它们更令人困惑然后很有帮助,实际上声明了一个类级别的实例变量。静态的权衡是:
为了:
反对:
- 无法在构造函数中初始化(但可以在其声明中内联初始化,这提供了我上面提到的额外初始化字段/代码)
- 无法根据您在代码中类本地人的典型位置定位
- 看起来像当地人,但不是