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