私のプログラムは、オブジェクトのコピーを作成するのではなくポインタを割り当てることにしました。私はこのようなものがあります:VB.net 3.5代入演算子ではなくコピーする代わりにポインタを割り当てますか?
Public Class Foo
Private myFooData As New List(Of FooData)
Public Sub New(ByVal newFooData As List(Of FooData))
myFooData = newFooData
End Sub
Public Property FooValues() As List(Of FooData)
Get
Return myFooData
End Get
Set(ByVal value As List(Of FooData))
myFooData = value
End Set
End Property
End Class
をそして、それはこのように使われています:
Public Sub Dosomething()
Dim mainFoo as new Foo
For x = 1 to 10
mainFoo.FooValues(x) = New FooData
Next
Dim originalFoo as new Foo
originalFoo.FooValues = mainFoo.FooValues.Take(3).ToList
Dim newFoo as new Foo
newFoo.FooValues = originalFoo.FooValues
newFoo.FooValues(1) += 1
End Sub
非常に単純化され、基本的に私がやっています。だから何らかの理由で今日newFoo.FooValuesのitemを変更すると、originalFoo.FooValuesも変更され、mainFooは変更されません。私はオブジェクト全体を割り当てようとしましたが、同じ結果が得られます。なぜこれが起こっている可能性があり、それを修正する方法は?
FooDataは、2つの設定可能なプロパティ、つまり両方の小数を持つ別のクラスです。私は元のFooValuesを新しいFooValuesとプロパティのセットに割り当てるときに.ToList()を使用しようとしましたが、それでも同じように動作しますので、何らかの選択やフィルタを行う必要があると仮定しますそれはコピーを作成することです。 – Loscas
@ Loscasコピーを自動的に作成する方法はありません。データをコピーするのは効率が悪く、デザインが悪い(失効したデータを扱うことを促進します)。 –