- - PR -
Staticな変数の寿命
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-10 14:29
VS2005 VBです。
初歩的な事ですがよろしくお願いいたします。 クラスAのTest2メソッドのstatic変数iについて static変数の寿命は定義されているクラスが破棄されるまでと認識していたのですが クラスBのTest1メソッドを呼び出すと、static変数iは加算され続けます。 Using〜EndUsingによりClassAは破棄されたのではないのでしょうか? またstatic変数iはいつ0になるのでしょうか? 明示的に0にしなければならないのでしょうか? 【クラスA定義】 Public Class ClassA Public Sub Test2 Static i As Integer = 0 <-★ i += 1 Messagebox.Show(i.ToString) End Sub End Class 【クラスB定義】 Public Class ClassB Public Sub Test1() Using clsA as New ClassA clsA.Test2 End Using End Sub End Class | ||||||||
|
投稿日時: 2007-01-10 14:48
> static変数の寿命は定義されているクラスが破棄されるまでと認識していたのですが
アプリケーションの終了まで、ではなかったでしょうか。 | ||||||||
|
投稿日時: 2007-01-10 15:00
プロシージャ内で宣言されたstatic変数の寿命は
クラスが消滅すまでのはずです。 | ||||||||
|
投稿日時: 2007-01-10 15:02
Using について誤解があるようです。 Using は IDisposable.Dispose メソッドを自動で呼び出しているだけです。 あなたの定義した ClassA の Dispose メソッドの実装によって結果が変わるわけです。
というわけで、これはちょっと御幣があるのではないでしょうか。 [編集履歴] "あなたの定義した~" の日本語がおかしかったので、編集しました。 [/編集履歴] [ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2007-01-10 15:09 ] | ||||||||
|
投稿日時: 2007-01-10 15:03
こんにちは。
Using ステートメント というのは、ステートメントの終了時に IDisposable インターフェースを実装したオブジェクトの Dispose メソッドが実行されることを保証するためのもので、オブジェクトを破棄するためのものではないです。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 | ||||||||
|
投稿日時: 2007-01-10 15:05
正しくは、そのクラスの 'インスタンスが' 消滅するまでの間ですね。
インスタンスごとにユニークですから。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-01-10 15:20
あ、VBとC#でstaticの意味が違うのですね。。。
すみませんでした。 | ||||||||
|
投稿日時: 2007-01-10 15:28
じゃんぬ様 ue様 ありがとうございます。
そうでした。スイマセン忘れていました。
ClassAのTest2メソッド内のstatic変数iを0にするため(=ClassAインスタンスを破棄)するためにはどのようなコードを記述すればよいのでしょうか? また重ねて質問で申し訳ありませんが ClassAのTest2メソッドがSharedの場合、Static変数iの寿命はどうなるのでしょうか? 【クラスA定義】 Public Class ClassA Public Shared Sub Test2 Static i As Integer = 0 <-★ i += 1 Messagebox.Show(i.ToString) End Sub End Class 【クラスB定義】 Public Class ClassB Public Sub Test1() ClassA.Test2 End Sub End Class |