オブジェクト変数への代入 (Visual Basic)

オブジェクトにオブジェクト変数を代入するには、通常の代入ステートメントを使用します。 次の例で示すように、オブジェクト式または Nothing キーワードを代入することができます。

Dim thisObject As Object
' The following statement assigns an object reference.
thisObject = Form1
' The following statement discontinues association with any object.
thisObject = Nothing

Nothing は、現在変数に代入されているオブジェクトがないことを意味します。

初期化

コードの実行が開始されると、オブジェクト変数は、Nothing に初期化されます。 宣言に初期化を含むものは、宣言ステートメントの実行時に、指定された値に再初期化されます。

宣言に初期化を含めるには、New キーワードを使用します。 次の宣言ステートメントは、オブジェクト変数 testUriver を宣言し、それらに特定のオブジェクトを代入します。 それぞれは、適切なクラスのオーバーロードされたコンストラクターのいずれかを使用して、オブジェクトを初期化します。

Dim testUri As New System.Uri("https://www.microsoft.com")
Dim ver As New System.Version(6, 1, 0)

関連付けの解除

オブジェクト変数を Nothing に設定すると、変数と特定のオブジェクトの関連付けは解除されます。 これにより、変数の変更によってオブジェクトが誤って変更されることがなくなります。 また、次の例で示すように、オブジェクト変数が有効なオブジェクトを指しているかどうかをテストすることもできます。

If otherObject IsNot Nothing Then
    ' otherObject refers to a valid object, so your code can use it.
End If

変数が参照するオブジェクトが別のアプリケーション内にある場合、このテストでは、そのアプリケーションが終了したか、またはオブジェクトを無効にしただけであるかを判断することはできません。

値が Nothing に設定されたオブジェクト変数は、"null 参照" とも呼ばれます。

現在のインスタンス

オブジェクトの "現在のインスタンス" は、コードで現在実行されているインスタンスです。 すべてのコードはプロシージャ内で実行されるため、現在のインスタンスは、プロシージャを呼び出したインスタンスです。

Me キーワードは、現在のインスタンスを参照するオブジェクト変数として機能します。 プロシージャが Shared ではない場合、Me キーワードを使用して、現在のインスタンスへのポインターを取得できます。 Shared プロシージャを、クラスの特定のインスタンスに関連付けることはできません。

Me は、現在のインスタンスを別のモジュールのプロシージャに渡す場合に使用すると特に有用です。 たとえば、複数の XML ドキュメントがあり、これらのすべてに何らかの標準テキストを追加したいとします。 次の例は、このためのプロシージャを定義します。

Sub addStandardText(XmlDoc As System.Xml.XmlDocument)
    XmlDoc.CreateTextNode("This text goes into every XML document.")
End Sub

すべての XML ドキュメント オブジェクトは、このプロシージャを呼び出して、その現在のインスタンスを引数として渡すことができます。 次に例を示します。

addStandardText(Me)

関連項目