我正在查看关于VB.Net的局部变量的少用Static关键字的MSDN文档。我的问题是不关于静态如何工作(我个人计划避免使用它,因为它似乎可能会给未注意副作用的未来程序员带来悲伤。)我的问题是关于文档中的这个陈述:
任何局部变量的行为取决于它是否被声明 在共享过程中。如果该过程是共享的,则其所有本地 变量自动共享。这包括静态 变量。这整个变量只有一个副本 应用
这似乎意味着Shared Sub中的所有局部变量都会像静态变量一样 - 它们会将它们的值保持在不同的调用中。但我知道情况并非如此,我写了一个小测试程序来证明它:
Class TestSharedSub
Shared Sub Main()
Test()
Test()
Test()
Console.Write("Press any key to continue...") : Console.ReadKey()
' Output:
' 1, 1
' 2, 1
' 3, 1
End Sub
Shared Sub Test()
Dim iNormal As Integer
Static iStatic As Integer
iNormal += 1
iStatic += 1
Console.WriteLine(iStatic & ", " & iNormal)
End Sub
End Class
那么有人能以一种有意义的方式为我解释上述陈述吗?或者这是文档中的错误?它自VS 2005版本的文档以来一直存在,并且仍然存在于Visual Studio 11版本中。
答案 0 :(得分:3)
不,这是胡说八道。它继续在下一段完全被打破:
如果过程不是Shared,则其局部变量是实例变量。
局部变量不是实例变量......
撰写该页面的人似乎根本不了解局部变量。善良知道他们的递归是什么。请注意,合理地开始:
通常,一旦过程停止,过程中的局部变量就不再存在。
......但这种说法显然与后来的说法相矛盾。 叹息。
我建议您在Connect上提交错误。
答案 1 :(得分:3)
那段特定的文件是错误的。在Shared
方法中声明的局部变量与在非共享方法中声明的局部变量没有什么不同。本地人唯一的行为差异就是使用Static
修饰符声明它们。
我会提醒相关团队。
编辑
负责文档的团队已收到警报,并将在不久的将来更正文档。