タイトル | : Re^2: VB2005の'New'について |
記事No | : 4507 |
投稿日 | : 2006/11/07(Tue) 09:58 |
投稿者 | : form・Z |
> > Class_Array1(i) = Class_Array1(j) '(i <> j) > > に等価な処理が行なわれたとします。 > この = は、(比較式のイコールではなく)代入式のイコールなのですね。 > > > とすれば、一般にはClass_Array1(i) と Class_Array1(j)は別々の参照を > > 持つはずです。(ここが間違っているのでしょうか?) > 裏のコードが見えないので、確実にそうだとは保証できませんが、 > 一般的には別の参照となるでしょうね。 > > 実際、同じオブジェクトの参照であるかどうかを、If 文等で調査されたかと > 思いますが、その結果はどうでしたか? > > > ところが、私の環境でテストしたところでは、 > 問題を再現可能な「最小限のコード」を示してもらえませんか? > もしかしたら、テストコードに問題があるのかも知れませんし。 > > > これは、言語仕様なのでしょうか? > 個人的な予想では、「うっかり Shared メンバを使ってました…」というオチな気がします。
この問題ですが、どうもマシンのメモリの問題のようで、マシンの起動直後 の作業では本来的な動作を見せているようです。 昨日のうちに回答したかったところですが、開発途中のコードが何度かバグを 起こしているうちに、マシン自体が不安定になって生じた動作かもしれません。
コードをまとめますと、
Class_Array(i) = Class_Array(j) Msgbox(Object.ReferenceEquals(Class_Array(i), Class_Array(j)))'-(1) Dim Class_Array_Work As New MyClass2 Class_Array(i) = Class_Array_Work Msgbox(Object.ReferenceEquals(Class_Array(i), Class_Array(j)))'-(2)
とすると、Msgbox-(1)は"True"を表示、Msgbox-(2)は"False"を表示しました。
この段階からClass_Array(i).Numberの値を変更しても、Class_Array(j).Number は別個の値を持っていたことから、インスタンスは別々に確保されて様です。
お騒がせいたしました。 ご回答いただきまして、ありがとうございました。
|