静态局部变量是不是很糟糕?

时间:2011-04-26 13:55:07

标签: vb.net oop design-patterns static-variables

相关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中推荐的吗?

2 个答案:

答案 0 :(得分:8)

  

静态局部变量是不是很糟糕?

即可。静态局部变量在很大程度上与非局部私有变量有所不同:它们的范围较小。由于您总是希望保持尽可能小的范围(=更好的封装),因此局部静态可能优于私有变量。

另一方面,本地静态变量可能难以正确初始化。如果需要复杂的初始化(例如,如果稍后需要重新初始化变量),则本地静态变量可能不合适。

答案 1 :(得分:0)

我会推荐这个。

Visual Basic中的静态意味着一个或多个声明的局部变量将继续存在,并在声明它们的过程终止后保留其最新值。 参考:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/modifiers/static

那么,你为什么要那样做?下次进入此Sub时,您将继续重新初始化此变量。我不认为你甚至可以再访问它,除非你有这个类的第二个实例,并且如果两个实例同时运行,“a”的值可能影响第二个中的“a”的值实例。除非有意,否则这将是灾难性的。正如前面的答案所说的那样 - 范围越小越好。

所以,除非我弄错了,否则这将是非常糟糕的练习。