相关C ++问题:Static local variables in methods a bad practice?
在VB.NET中,当我想要一个简单的计数器或每次调用方法时递增的东西时,我经常会发现自己编写的代码如下:
Private Sub tmrRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrRefresh.Tick
Static a As Integer = 0
a += 1
'...rest of method depends on a
End Sub
这一般是在VB.NET和OOP中推荐的吗?
答案 0 :(得分:8)
静态局部变量是不是很糟糕?
否即可。静态局部变量在很大程度上与非局部私有变量有所不同:它们的范围较小。由于您总是希望保持尽可能小的范围(=更好的封装),因此局部静态可能优于私有变量。
另一方面,本地静态变量可能难以正确初始化。如果需要复杂的初始化(例如,如果稍后需要重新初始化变量),则本地静态变量可能不合适。
答案 1 :(得分:0)
我会不推荐这个。
Visual Basic中的静态意味着一个或多个声明的局部变量将继续存在,并在声明它们的过程终止后保留其最新值。 参考:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/modifiers/static
那么,你为什么要那样做?下次进入此Sub时,您将继续重新初始化此变量。我不认为你甚至可以再访问它,除非你有这个类的第二个实例,并且如果两个实例同时运行,“a”的值可能影响第二个中的“a”的值实例。除非有意,否则这将是灾难性的。正如前面的答案所说的那样 - 范围越小越好。
所以,除非我弄错了,否则这将是非常糟糕的练习。