Kopiera objekt

.NET

4 svar · 594 visningar · startad av invecklaren

Medlem sedan jan. 2008280 inlägg
Trådstart#1

Hej!

Jag har en instans av en egen klass Customer:
Customer cust1= New Customer()

Lite senare skapar jag en ny instans cust2 av Customer. Denna instans ska ha samma värden på egenskaperna som cust1. Detta undrar jag hur jag ska göra utan att peka mot cust1.

Jag vill inte sätta
cust2=cust1;

för då kommer ju att cust2:s egenskaper att ändras då cust1 egenskaper ändras (vilket sker senare i koden). Jag vill alltså ha någon form av "by-value" kopiering mellan cust1 och cust2. Finns det något enkelt sätt eller måste jag ta egenskap för egenskap?

Det må låta lite ologiskt att göra så här, men det behövs göras...

Medlem sedan feb. 20002 300 inlägg
#2

Du måste göra en "deep copy" av ditt objekt. Här finns en generisk metod för att göra det lite mer automagiskt än att använda Clone i ICloneable

Medlem sedan jan. 2008280 inlägg
#3

Vackert!

Medlem sedan okt. 2002188 inlägg
#4

Fungerar inte MemberwiseClone?

http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone(VS.100).aspx

Medlem sedan feb. 20002 300 inlägg
#5

Walker skrev:

Fungerar inte MemberwiseClone?

http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone(VS.100).aspx

Nej. MemberwiseClone gör en shallow copy vilket betyder att den gör en kopia av alla valuetypes men eventuella referenser kopierar den inte.

Dvs kopierar du objekt A till objekt B så kommer A och B att peka på samma referenser.

393 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
131 ms — deklarationer (db)
123 ms — hämta statistik (db)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)