VB.NETの配列は参照型
「VB.NETの値型と参照型について」の記事で「参照型」には「配列」があると触れましたが、 今回はそのことを詳しく見ていきます。
まずは配列の宣言方法ですが、以下の様に定義できます。
Dim 配列名(指標上限値) As 各要素のデータ型
配列宣言の例としては以下の様になります。
3,4行目の配列の初期化を含む宣言の場合、「指標上限値」は省略する必要があります。
通常配列を扱う場合は、配列の添え字を指定して各要素のデータにアクセスします。 例えば以下の様な感じです。
「LBound」「UBound」は配列の指標の最小値及び最大値を返す関数です。 配列の全てを処理する場合、この関数を使うほうがバグが出にくいと思います。
そこで参照型であることを説明するために以下のソースを見てください。
このソースで表示される結果からわかるように、 「intArr2」と「intArr」が示すデータは全く同じものになります。 「intArr2」に「intArr」をコピーしているので当然なのですが、 「intArr」の配列の実体は5個のInteger型のデータの並びなのですが、 それを参照しているものが「intArr」の変数の中身なのです。 図で示すと以下の様な感じです。
更に以下のソースを見てください。 「intArr」を宣言後、要素にデータを設定し、その後で「intArr」に「Nothing」を入れています。
これを実行すると最後のコンソール出力の行でエラーが発生します。 「intArr」が指し示していた内容がクリアされたため、 最初に宣言したときの配列の実体への参照が出来なくなっているからです。
このことから、配列の変数も、クラス変数と同様な感じが分かると思います。
■関連記事
⇒VB.NETの関数の参照型データの引数での値渡しと参照渡しの違いについて
⇒VB.NETの関数の戻り値が参照型について
⇒VB.NETの配列のReDimについて
⇒VB.NETの値型と参照型について
⇒VB.NETの文字列型(String)について
コメント