クラス型は参照型です。したがって、これは同じオブジェクトへの 3 つの参照をリストに追加します。
Dim AllEstimatesReturn As New List(Of QuoteReturnData)
Dim TempQuoteReturnFromExecuteEstimate As New QuoteReturnData
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate)
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate)
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate)
毎回新しいオブジェクトを作成するか
Dim AllEstimatesReturn As New List(Of QuoteReturnData)
AllEstimatesReturn.Add(New QuoteReturnData())
AllEstimatesReturn.Add(New QuoteReturnData())
AllEstimatesReturn.Add(New QuoteReturnData())
または、クローンを作成するメソッドを実装しQuoteReturnData
ます。
Class QuoteReturnData
' Creates an exact copy of the current QuoteReturnData object.
Public Function SwallowCopy() As QuoteReturnData
Return DirectCast(Me.MemberwiseClone(), QuoteReturnData)
End Function
End Class
MemberwiseClone
から継承されObject
、必要なことを正確に実行します。ただし、このメソッドは保護されており、クラス内からのみ呼び出すことができます。したがって、パブリック関数にラップします。
今、あなたはこれを行うことができます
Dim AllEstimatesReturn As New List(Of QuoteReturnData)
Dim TempQuoteReturnFromExecuteEstimate As New QuoteReturnData
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate.SwallowCopy())
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate.SwallowCopy())
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate.SwallowCopy())
これは浅いクローンを作成するだけであることに注意してください。オブジェクトに他のオブジェクトへの参照が含まれている場合、これらの他のオブジェクトは自動的に複製されません。これでいいのか、ディープ クローンが必要なのかは、あなた次第です。