Autor Beitrag
ein c# Programmierer
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 28.01.21 15:42 
Hallo,
ich stelle mir die Frage wie man in C# bestimmte Eigenschaften von bereits konstruierten Objekten übergeben kann.
Also ich habe eine Klasse Clients und ein konstruiertes Objekt Clients person1 = new Clients(); mit verschiedenen Eigenschaften der Klasse Clients. Kann ich ein neues Objekt Person2 erstellen, dass genau die gleichen Werte wie Person1 hat?
Vielen Dank :D

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4366
Erhaltene Danke: 940

Win10
C#, C++ (VS 2015/17/19)
BeitragVerfasst: Do 28.01.21 17:07 
Hallo und :welcome:

du meinst, eine Kopie eines Objekts erstellen?
Da gibt es zwei verschiedene Ausprägungen: Flache Kopie (Shallow Copy) und Tiefe Kopie (Deep Copy), s.a. Flache und Tiefe Kopie.
Um eine flache Kopie zu erstellen, kannst du die Methode Object.MemberwiseClone() aufrufen (s.a. Beispiel dort).

Bei tiefen Kopien (beliebiger Klassen) würde ich auf eine externe Library setzen, z.B. von github (ich selber nutze DeepCloner sowie Fasterflect).
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1217
Erhaltene Danke: 160

Windows 10 x64 Home Premium
C# (Visual Studio Preview)
BeitragVerfasst: Do 28.01.21 17:56 
Wie Th69 schon sagt - es geht.
Aber wozu?

Bei C# arbeitet man normalerweise nicht mit Kopien, sondern mit Referenzen.
Du kannst also einfach die Referenz weiter geben und hast in der nächsten Methode alle Daten, wie vorher auch und jede Änderung ist auch überall sonst verfügbar.

Wenn Du aus irgendeinem Grund doch eine "richtige" Kopie haben willst, würde ich das immer manuell umsetzen.
Also z.B. "Copy"-Methode, in der Du sämtliche Daten korrekt kopierst und eine neue Instanz erzeugst.
Das hat den Vorteil, dass Du die Kontrolle darüber behältst und nicht ständig aufpassen musst, was Du als Variable ablegst, es gibt nämlich auch Klassen, die sollte man nicht "MemberwiseClone"n.
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 907
Erhaltene Danke: 153

Win 10
VS 2013, VS2015
BeitragVerfasst: Do 28.01.21 21:16 
Mit den neuen records (ab C# 9) geht das relativ einfach:
ausblenden C#-Quelltext
1:
2:
var person = new Person { FirstName = "Mads", LastName = "Nielsen" };
var otherPerson = person with { LastName = "Torgersen" };


Ansonsten bleibt dir nur eine manuelle Kopie, u.U mit externen Bibliotheken wie Automapper.