Avatar billede jesph02 Nybegynder
10. juli 2006 - 07:50 Der er 2 kommentarer og
1 løsning

Clone en klasse

Jeg har følgende klasse, som jeg har forsøgt at skrive en clone metode til. Jeg tror nu også godt nok at clone metoden virker på selve klassen, men den kloner ikke m_array. Hvordan får man den til det?

Public Class MyNewClass
    Implements ICloneable
    Private m_array(ProjectMaps.DrawX, ProjectMaps.DrawY) As FELTTYPE

    Public Function Clone() As MyNewClass
        Return DirectCast(Me.MemberwiseClone(), MyNewClass)
    End Function
    Private Function CloneMe() As Object Implements ICloneable.Clone
        Return Clone()
    End Function
End Class
Avatar billede capn Nybegynder
10. juli 2006 - 12:41 #1
Det du vil have hedder deep-copy hvor alle felter (og deres underfelter osv.) også bliver korrekt klonet. Det kan gøres på følgende måde:

Imports System.Reflection
<Serializable()> _
Public Class MyNewClass
'felter her
Function Clone() As MyNewClass
Dim ms As New System.IO.MemoryStream(1000)
Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, _
New Runtime.Serialization.StreamingContext( Runtime.Serialization.StreamingContextStates.Clone))
bf.Serialize(ms, Me)
ms.Seek(0, IO.SeekOrigin.Begin)
Clone = CType(bf.Deserialize(ms), MyNewClass)
ms.Close()
End Function

Ovenstående er copy-pastet fra diverse filer så der kan være fejl, men grundlæggende tror jeg at det hele er med.
Avatar billede jesph02 Nybegynder
10. juli 2006 - 16:25 #2
Det fungerer bare. Gider du skrive et svar
Avatar billede capn Nybegynder
11. juli 2006 - 17:36 #3
Super.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester