投稿者 るきお  (社会人) 投稿日時 2010/7/1 13:32:05
>事例7のサンプルで、もしByRefを必要とするコードを書かなければならないときは
>どのような動作をさせたいときなのですか?
ByRefは「手段」に過ぎないので、結果としての機能にByRefを使わないとできないことはありません。
なので、「ByRefを必要とするコードを書かなければならないとき」はちょっと想像できません。

また、ByRefは使用しないことを多くの人が推奨しており、ByRefが効果的に使われている事例を調べること自体が難しいかもしれません。

>上記の説明だけでは、どのようなときに使えば良いのかわかりかねます
以上のような理由で、「使えばよい」ときというものも特にないと思っています。

それでも一応、ByRefが使用されるのは既にあがっているような理由が多いです。
1.メソッドから複数の情報を返したい場合
2.メソッド内で引数を変更したい場合

1は戻り値をクラスや構造体にすることで解決でき、特にVB2010から使用できるTupleクラスを使うと楽ができます。…が、ByRefを使う場合の多くはこの事例のように感じます。

2は引数を交換するメソッドの例が有名です。
    
Public Sub Test()
    Dim X As Integer = 1
    Dim Y As Integer = 2

    Swap(X, Y)

    MsgBox ("X=" & X & ", Y=" & Y)

End Sub

Public Sub Swap(ByRef value1 As IntegerByRef value2 As Integer)

    Dim temp As Integer 

    temp = value1
    value1 = value2
    value2 = temp

End Sub


でも、このようなことをしたいという需要がそれほど多くないのでレアケースかなと思います。


他のプログラマが書いたコードを読めるようになるためにByRefの機能は抑えておいた方がいいですが、自分で書くプログラムではByRefは使わない方が良いと思います。