Tidigare kodade jag i C#, men har gått över till VB. Märkligt att jag inte upptäckt det tidigare... Vill du ha mer kontroll över kloningsprocessen (Shallow/Deep) så kan du ju göra en egen kloningsmetod eller skapa en konstruktor som tar en instans av "sig självt" och kopierar datan som skickas in. Så det finns några olika metoder, som passar för olika situationer... Det kan inte vara så att du i C# skapade Employment som en struct? Det ger ju ett annat resultat än om det är en klass:Pass by ref / pass by value
Se följande exempel Dim person1 As Person
Dim person2 As Person
person1.Employment.Id = 1
person2.Employment = person1.Employment
person2.Employment.Id = 2
När jag gör detta blir även
person1.Employment.Id = 2.
Det verkar alltså som att det blir en referens till objektet och inte en kopia av det. Om jag däremot gör person2.Employment = DirectCast(person1.Employment.Clone(), Employment)
verkar det fungera som jag är van vid.
Inser att detta är fråga 1 på grundkursen i programmering och att jag egentligen borde ha benkoll på det, men jag har inget minne av att C# uppträdde så här. Antingen gör jag en stor tankevurpa eller så är det skillnader mellan hur VB och C# refererar sina object.
Tacksam för svar.
Sv:Pass by ref / pass by value
Är lösningen i exemplet den mest optimala eller finns det någon bättre?Sv: Pass by ref / pass by value
Sv: Pass by ref / pass by value
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim bosse As New Person
Dim nisse As New Person
bosse.EmpCls = New EmploymentClass
bosse.EmpStr = New EmploymentStruct
bosse.EmpCls.ID = 1
bosse.EmpStr.ID = 1
nisse.EmpCls = bosse.EmpCls
nisse.EmpStr = bosse.EmpStr
nisse.EmpCls.ID = 2
nisse.EmpStr.ID = 2
MessageBox.Show("Klassens id är " & bosse.EmpCls.ID & ", men structens id är " & bosse.EmpStr.ID)
End Sub