VB.Netのローカル変数のキーワードであるStaticがほとんど使用されていませんでした。私の質問はではなく、の静的な動作についてです(私は個人的には、それが副作用に気付かない将来のプログラマーに悲嘆を引き起こす可能性があるように私は個人的にそれを使用することを避ける予定です)。私の質問は、:MSDNのドキュメントに誤りがありますか? "プロシージャがSharedの場合、そのローカル変数はすべて自動的に共有されます。これにはStatic変数も含まれます。"
任意のローカル変数の振る舞いは、それが共有の手順で 宣言されているかどうかに依存します。手順が共有の場合、そのローカルの 変数はすべて自動的に共有されます。これには、変数 が含まれます。そのような変数のコピーは、 アプリケーション全体に対して1つしかありません。
これは、共有サブ内のすべてのローカル変数は静的変数のように振る舞うことを意味するようだ - 彼らは別々の呼び出しにわたってその値を保持します。しかし、私はこれがそうでないことを知っていた、と私はそれを証明するために少しテストプログラムを書いた:
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
だから、誰もが理にかなっている方法で、私のために上記の文を解釈することができますか?これはドキュメントのバグですか?それは、2005年のバージョンのドキュメント以来存在しており、Visual Studio 11バージョンにはまだ存在しています。
ありがとう、Jared!彼があなたの前にほんの数分しかいないので、私はジョンに答えてくれました。しかし、私はあなたに私の言葉を入れていただきありがとうございます。私はまだボールを動かすためにConnectにバグレポートを提出するつもりだと思う:https://connect.microsoft.com/VisualStudio/feedback/details/730944/msdn-documentation-error-if-the-procedure-is -shared-all-its-local-variablesは自動的に共有されます。これは静的変数を含みます。 –
@JordanRieger私は私が知る追加情報で私の答えを編集します。 – JaredPar
彼らはVS 2012および2012のドキュメントを更新しましたが、2008または2005は更新しませんでした。Connectのバグレポートに、2008年と2005年のドキュメントを修正するように要請する別のコメントを投稿しました。 –