10. juli 2006 - 07:50Der 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
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.
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.