Entwickler-Ecke

C# - Die Sprache - Übergabe von Objekteigenschaft


ein c# Programmierer - Do 28.01.21 16:42
Titel: Übergabe von Objekteigenschaft
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 - Do 28.01.21 18:07

Hallo und :welcome:

du meinst, eine Kopie eines Objekts erstellen?
Da gibt es zwei verschiedene Ausprägungen: Flache Kopie (Shallow Copy) [https://de.wikipedia.org/wiki/Flache_Kopie] und Tiefe Kopie (Deep Copy), s.a. Flache und Tiefe Kopie [https://entwickler-ecke.de/topic_Flache+und+Tiefe+Kopie_97120,0.html].
Um eine flache Kopie zu erstellen, kannst du die Methode Object.MemberwiseClone() [https://docs.microsoft.com/de-de/dotnet/api/system.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 [https://github.com/force-net/DeepCloner] sowie Fasterflect [https://github.com/buunguyen/fasterflect]).


Palladin007 - Do 28.01.21 18: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 - Do 28.01.21 22:16

Mit den neuen records (ab C# 9) geht das relativ einfach:

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.