投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/6/8 12:26:13
> 僕のAdd()は呼び出す度にbordクラスのインスタンスを作成しています。
> なので呼び出す度に違うインスタンスのはずなんですけどね。
問題は bord ではなく、BordStones の方です。

元のコードを簡略化して記述すると、
  Private ReplayStoneBordList As New List(Of Board)()
  Public Sub Add(ByVal bords As Bord)
    Dim bord As New Bord()
    bord.BordStones = bords.BordStones   '★ 
    ReplayStoneBordList.Add( bords )
  End Sub
となりますよね。問題は ★ の右辺です。
左辺の bord は新規インスタンスですが、右辺の bords はどうでしょうか。

Add メソッドを呼び出す際に、引数に渡す Bord オブジェクトが
新規に作られた物であれば、BordStones も新規インスタンスでが、
既存のインスタンスなら、BordStones も既存インスタンスのはずです。

その結果、ReplayStoneBordList(n) が返す Bord 自体は新規インスタンスでも、
ReplayStoneBordList(n).BordStones は既存インスタンスとなる可能性があります。