Klasse Klonen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    Klasse Klonen

    Hallo Zusammen,


    ich habe folgende Klasse:

    VB.NET-Quellcode

    1. Public Class poco
    2. Public Class root
    3. Public contexts As New List(Of recipient)
    4. End Class
    5. Public Class werte
    6. Public email As String
    7. Public Auftragsnummer As String
    8. Public Kundennummer As String
    9. Public snr1 As String
    10. Public snr2 As String
    11. Public snr3 As String
    12. Public snr4 As String
    13. Public snr5 As String
    14. End Class
    15. Public Class recipient
    16. Public recipient As New werte
    17. End Class
    18. End Class


    Jetzt wird eine neue Instanz von recipient erstellt und die werte dementsprechend ergänzt.

    Wenn ich nun con2 as new poco.recipient mache und dann con2=con ist werden natürlich beim ändern von z.B. email nicht nur der Wert bei con2 sondern auch bei con geändert. Das ist natürlich falsch.. :)

    Habe mich schon ein bisschen in "icloneable" eingelesen aber ich weiss nicht wie ich das in meinem Fall anwenden muss. :(

    Hier mal der Rest vom Code:

    VB.NET-Quellcode

    1. Dim con As New poco.recipient
    2. con.recipient.Auftragsnummer = aktuellezeile
    3. con.recipient.email = "test@test.com"
    4. con.recipient.Kundennummer = "102640"
    5. con.recipient.snr1 = snr1
    6. con.recipient.snr2 = snr2
    7. con.recipient.snr3 = snr3
    8. con.recipient.snr4 = snr4
    9. con.recipient.snr5 = snr5
    10. Dim con2 As New poco.recipient
    11. con2 = con
    12. con2.recipient.email = "test2@test.com"
    13. Dim r As New poco.root
    14. r.contexts.Add(con)
    15. r.contexts.Add(con2)



    Vielen Dank für eure Mühe!
    Guten Abend @Holistiker

    Es gibt die oberflächliche Klassenkopie, und es gibt die tiefe Klassenkopie.
    In deinem Falle müsste man eine tiefe Klassenkopie machen.

    Der einfachste Weg dazu ist der Weg über einen gut aufgebauten Klassenkonstruktor. Der stellt so auch sicher, dass wirklich alle dazugehörenden Variablen richtig gefüllt werden.


    Freundliche Grüsse

    exc-jdbi
    @φConst @exc-jdbi Jou.
    @Holistiker Die eleganteste Lösung ist, die Instanz in einen MemoryStream zu serialisieren und von dort in eine neue Instanz zu deserialisieren.
    Ansonsten mach Dir einen Copy-Konstruktor, also einen Konstruktor, der eine Instanz derselben Klasse als Parameter bekommt, dann musst Du "zu Fuß" alle Member übertragen bzw. clonen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!