関数に渡す配列について質問があります。関数に配列を渡す場合、ByRefでしか渡せないとテキストに書いてあったのですがByValで引数を渡すプログラムを作ってもコンパイルエラーにはなりませんでした。ByValで渡しても関数内部で配列の値を入れるとByRefと同じ動作をして渡した配列の値が変えられてしまいました。関数に配列を渡すとき、ByValでも強制的にByRefに作り替えられてしまうようだなと思っているのですが、実際にそうなのでしょうか?何か知っている方がいらっしゃいましたら、よろしくお願いいたします。向けて書かれたものではないでしょうか。以降とは文法が似ているだけの別言語と考えて良いので、参考にはしない方が良いと思います。渡した配列の値が変えられてしまいました。思っているのですが、実際にそうなのでしょうか?配列は参照型のオブジェクトなので、実体は一つだけであり、メソッドの引数にした場合も配列の場所(参照)だけコピーして渡され、配列の実体はコピーされません。いずれで渡しても、要素を書き換えれば、ただ一つの実体の内容が書き換えられます。違いは以下のようなサンプルで分かります。22:44:54)shuさん、Hongliangさん、ありがとうございます。今読んでいる本は、技術評論社の川西朝雄著のVB.NET基礎学習BIBLEという本で247ページ目に配列データはByRefによる参照渡しで行う、と書かれていました。お二人が書かれたサンプルを実行してみると、確かにその通りの結果になったのですが自分で試したコードと結果が違いました。Subこのようなコードを書いたのですが、結果は10205060このような結果になりました。ByRef、ByValもどちらも同じような動きをしました。a(1)などでインデックスまで指定している場合はこのような動きになるのでしょうか?shuさん、Hongliangさんのコードだと、ByValで渡したときは影響は無かったのですが私のと明らかに動作が違うように思われます。私のコードのどこに違いがあるのでしょうか。明らかに動作が違うように思われます。私のコードのどこに違いがあるのでしょうか。インデックス指定して配列の一部を書き換えているのと、配列の代入自体を行っているという違いです。参照型だとByRefでもByValでも中身のコピーはされません。ByRefの場合、引数自体の書き換えをすると元の変数のなかも書き換わります。配列においては参照型なのでコピーはされません。引数自体の書き換えをしない限りByValとByRefの動作は同じになります。Sub内で処理し作成されたものをその引数を通して受け取る場合に使用します。構造体は値型なので大きい構造体を渡す場合はByRefの方がよいですがそういう場合は構造体ではなくクラスにした方が効率が良くなることが多いです。ByRef渡しを処理効率の為に使用するのは.Netではほぼありません。15:46:47)shuさん。ありがとうございました。ByRef、ByValだけではなく、代入の仕方にも影響があるんですね。気をつけてコーディングをしていこうと思います。