webForumDet fria alternativet

Kopiera objekt

4 svar · 576 visningar · startad av invecklaren

invecklarenMedlem sedan jan. 2008280 inlägg
#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...

PhorpherMedlem 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

invecklarenMedlem sedan jan. 2008280 inlägg
#3

Vackert!

WalkerMedlem sedan okt. 2002188 inlägg
#4

Fungerar inte MemberwiseClone?

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

PhorpherMedlem 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.

131 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)