小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

VB6とVB.NETでのNothingキーワードの違い

VB6でのNothingキーワードは、以下のようにオブジェクトのインスタンス破棄をする場合のみでしたが…

    'インスタンス破棄する。
    Set objClass1 = Nothing

VB.NETでは、以下の引用のように任意のデータ型の既定値を表すキーワードになりました。
また、変数が参照型である場合は、VB6と同様な感じです。だだし、.NETの場合は即時にインスタンス破棄をしないで、後からガベージコレクタが破棄する。

Nothing
任意のデータ型の既定値を表すキーワードです。変数に Nothing を代入すると、変数の宣言された型に対する既定値が変数に設定されます。型に変数のメンバが含まれている場合は、すべてに既定値が設定されます。次に例を示します。

Public Structure MyStruct
Public Name As String
Public Number As Short
End Structure
Dim S As MyStruct, I As Integer, B As Boolean
S = Nothing ' Sets S.Name to Nothing, S.Number to 0.
I = Nothing ' Sets I to 0.
B = Nothing ' Sets B to False.
変数が参照型である場合、つまりオブジェクト変数である場合は、Nothing を代入すると、どのオブジェクトとも関連付けられていない変数になります。次に例を示します。

Dim MyObject As Object
MyObject = Nothing ' No object currently referred to.
キーワード Nothing をオブジェクト変数に代入すると、その変数はどのオブジェクト インスタンスも参照しなくなります。それまで変数がインスタンスを参照していた場合は、変数に Nothing を設定しても、インスタンス自体が終了することはありません。インスタンスが終了されて、関連付けられていたメモリとシステム リソースが解放されるのは、アクティブな参照が残っていないことをガベージ コレクタが検出した後だけです。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vblr7/html/vakeynothing.asp