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 中是否建议这样做?

4

2 回答 2

9

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

没有。静态局部变量在一个方面与非局部私有变量完全不同:它们的作用域更小。由于您总是希望范围尽可能小(= 更好的封装),因此局部静态变量可能优于私有变量。

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

于 2011-04-26T14:13:09.753 回答
-1

不会推荐这个。

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

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

So, unless I am mistaken, this would be a very bad practice.

于 2018-01-24T11:01:01.027 回答