내 프로그램에서 개체 복사본을 만드는 대신 포인터를 할당하기로 결정했는데 이유가 확실하지 않습니다.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는 두 개의 setable 속성을 갖는 또 다른 클래스입니다. 둘 다 소수입니다. 나는 원래 FooValues를 새로운 FooValues와 속성 집합에도 할당 할 때 .ToList()를 사용해 보았습니다.하지만 여전히 동일하게 작동합니다. 그래서 당신은 선택의 일종을 취해야한다고 가정합니다. 그것을 사용하여 사본을 만듭니다. – Loscas
@Loscas 복사를 자동으로 생성 할 수있는 방법이 없습니다. 데이터 복사가 비효율적이며 디자인이 좋지 않습니다 (부실 데이터로 작업하는 것을 촉진합니다). –