vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: [OOP]: Zwei Objekt, aber ein Wert? 
Autor: ModeratorDaveS (Moderator)
Datum: 07.03.12 11:06

So kannst du eine Liste klonen:
    <Serializable()>
    Public Class MyObject
        Implements ICloneable
        Public Property int1 As Integer
        Public Property str1 As String
 
        Public Sub New(int As Integer, str As String)
            _int1 = int
            _str1 = str
        End Sub
 
        Public Function Clone() As Object Implements System.ICloneable.Clone
            Return Me.MemberwiseClone()
        End Function
    End Class
 
    Private Sub cloneList()
        Dim myObjects As New List(Of MyObject)
        For i = 1 To 5
            myObjects.Add(New MyObject(i, "xxx" & i.ToString()))
        Next
 
        Dim myObjects1 As New List(Of MyObject)
        For Each mo As MyObject In myObjects
            myObjects1.Add(mo.Clone())
        Next
 
        Debug.WriteLine(myObjects(0).int1)
        myObjects1(0).int1 = 99
        Debug.WriteLine(myObjects1(0).int1)
        Debug.WriteLine(myObjects(0).int1)
    End Sub
MemberwiseClone() "klont" nur die erste Ebene, Unterobjekte werden nicht neu angelegt. Man kann auch gucken ob Unterobjekte ICloneable unterstützen und rekursiv neue Objekte anlegen.

Eine Alternative gibt es mit Serialization. Hier müssen aber alle Objekte serializierbar sein.
    Public Function DeepClone(Of T)(ByVal obj As T) As T
        If obj Is Nothing Then Return Nothing
        Dim stream As IO.MemoryStream = New IO.MemoryStream
        Dim ser As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
        ser.Serialize(stream, obj)
        stream.Position = 0
        Return ser.Deserialize(stream)
    End Function
   Private Sub cloneList1()
        Dim myObjects As New List(Of MyObject)
        For i = 1 To 5
            myObjects.Add(New MyObject(i, "xxx" & i.ToString()))
        Next
 
        Dim myobjects2 As List(Of MyObject) = DeepClone(Of List(Of MyObject))( _
          myObjects)
 
        Debug.WriteLine(myObjects(0).int1)
        myobjects2(0).int1 = 99
        Debug.WriteLine(myobjects2(0).int1)
        Debug.WriteLine(myObjects(0).int1)
    End Sub

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
[OOP]: Zwei Objekt, aber ein Wert?2.137Streamfighter03.03.12 23:51
Re: [OOP]: Zwei Objekt, aber ein Wert?1.375Preisser04.03.12 00:02
Re: [OOP]: Zwei Objekt, aber ein Wert?1.743Manfred X04.03.12 05:14
Re: [OOP]: Zwei Objekt, aber ein Wert?1.325ModeratorDaveS04.03.12 09:05
Re: [OOP]: Zwei Objekt, aber ein Wert?1.385Streamfighter04.03.12 12:21
Re: [OOP]: Zwei Objekt, aber ein Wert?1.364Streamfighter07.03.12 09:27
Re: [OOP]: Zwei Objekt, aber ein Wert?1.319Micke07.03.12 09:57
Re: [OOP]: Zwei Objekt, aber ein Wert?1.360ModeratorDaveS07.03.12 10:24
Re: [OOP]: Zwei Objekt, aber ein Wert?1.297Manfred X07.03.12 10:29
Re: [OOP]: Zwei Objekt, aber ein Wert?1.370keco07.03.12 16:14
Re: [OOP]: Zwei Objekt, aber ein Wert?1.343ModeratorDaveS07.03.12 16:22
Re: [OOP]: Zwei Objekt, aber ein Wert?1.307keco07.03.12 16:34
Re: [OOP]: Zwei Objekt, aber ein Wert?1.313Manfred X07.03.12 17:16
Re: [OOP]: Zwei Objekt, aber ein Wert?1.298keco07.03.12 17:35
Re: [OOP]: Zwei Objekt, aber ein Wert?1.361ModeratorDaveS07.03.12 11:06
Re: [OOP]: Zwei Objekt, aber ein Wert?1.441ModeratorDaveS07.03.12 11:18
Re: [OOP]: Zwei Objekt, aber ein Wert?1.265Streamfighter07.03.12 15:21
Re: [OOP]: Zwei Objekt, aber ein Wert?1.333Manfred X07.03.12 15:36
Re: [OOP]: Zwei Objekt, aber ein Wert?1.388ModeratorDaveS07.03.12 15:42

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel