静态局部变量是一种不好的编程实践吗?

8

相关的C++问题:方法中的静态局部变量是一种不好的做法吗?

在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中是否推荐?

与C++问题相同的答案。无论语言如何,所有面向对象设计模式都将是相似的。在VB.NET中没有什么特别的。 - Cody Gray
2
@Cody 但是那个其他问题的接受答案不是特别好。 - Konrad Rudolph
@Cody 好的,我以为这两个编译器可能会有不同的处理方式,而且在另一个问题中也无法得到直接的答案。 - Flash
虽然有些老了,但是 @Cody: _VB.Net中的_Static_与C++中的static完全不同。它们是完全不同的概念。VB.Net中对应于C++中的static的是“Shared”。 - Joel Coehoorn
2个回答

9

静态局部变量是否是不好的做法?

不是。 静态局部变量与非局部私有变量的区别仅在于它们的作用域更小。由于我们总是希望保持作用域尽可能小(即更好的封装性),因此局部静态变量可以优于私有变量。

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


-2

不建议这样做。

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

那么,为什么要这样做呢?下次进入此子程序时,您将重新初始化此变量。我认为您甚至无法再访问它,除非您有此类的第二个实例,如果两个实例同时运行,则“a”的值可能会影响第二个实例中的“a”的值。除非有意,否则这将是灾难性的。正如先前的答案所正确指出的-范围越小越好。

因此,除非我弄错了,否则这将是一种非常糟糕的做法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接