Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Public Class DeepCopy
Public Shared Sub main()
Dim Person1 = New Person With {.Vorname = "Daniel", .Alter = 31}
Dim Tiere = New List(Of Tier)
Tiere.Add(New Tier With {.Name = "Fausto", .Tierart = Tierart.Hund})
Tiere.Add(New Tier With {.Name = "Lilly", .Tierart = Tierart.Katze})
Person1.Haustiere = Tiere
Dim Person2 = DeepCloneCopy(Person1)
End Sub
''' <summary>
''' Erzeugt eine "deep copy" eines Objekts also eine Kopie des Objekts
''' inclusive aller untergeordneten Objekte.
''' </summary>
''' <param name="ObjektToClone">Das zu clonende Objekt.</param>
''' <returns>Eine "deep Copy" des zu clonenden Objekts.</returns>
''' <remarks>Dieser Code funktioniert auch bei rekursiven Objektbeziehungen</remarks>
Public Shared Function DeepCloneCopy(ByVal ObjektToClone As Object) As Object
Using _memoryStream As New MemoryStream
Dim _result As Object
Dim _binaryFormatter As New BinaryFormatter
' das Objekt serialisieren
_binaryFormatter.Serialize(_memoryStream, ObjektToClone)
' An den Anfang des Streams springen
_memoryStream.Position = 0
' und das Objekt deserialisieren
_result = _binaryFormatter.Deserialize(_memoryStream)
Return _result
End Using
End Function
End Class
<Serializable()> _
Public Class Person
Public Vorname As String
Public Alter As Integer
Public Haustiere As List(Of Tier)
End Class
<Serializable()> _
Public Class Tier
Public Name As String
Public Tierart As Tierart
End Class
Public Enum Tierart
Hund
Katze
End Enum