Deep Clone
Public Class Point
Implements ICloneable
Public X as Integer
Public Y as Integer
Sub New(XX as Integer, YY as Integer)
X = XX
Y = YY
End Sub
Public Overloads Function ToString() As String
Return "(" & X & "," & Y & ")"
End Function
Public Overridable Function Clone() As Object _
Implements ICloneable.Clone
Return New Point(X, Y)
End Function
End Class
Public Class Line
Inherits Point
Public StartPoint As Point
Sub New(X As Integer, Y As Integer, Other As Point)
MyBase.New(X, Y)
StartPoint = Other.Clone()
End Sub
Public Overloads Function ToString() As String
Return "(" & Me.X & "," & Me.Y & ")" & _
" Other: " & StartPoint.ToString()
End Function
Public Overrides Function Clone() As Object
Return New Line(Me.X, Me.Y, StartPoint.Clone())
End Function
End Class
Module Test
Sub Main()
Dim P as New Point(4, 5)
Dim P1 As New Line(3,4, P)
Dim P2 As Line
P2 = P1.Clone()
P2.StartPoint.X = 5
P2.StartPoint.Y = 4
Console.WriteLine("First Object: " & P1.ToString())
Console.WriteLine("Cloned Object: " & P2.ToString())
End Sub
End Module
First Object: (3,4) Other: (4,5)
Cloned Object: (3,4) Other: (5,4)
ICloneable
Public Class Point
Implements ICloneable
Public X as Integer
Public Y as Integer
Sub New(XX as Integer, YY as Integer)
X = XX
Y = YY
End Sub
Public Overloads Function ToString() As String
Return "(" & X & "," & Y & ")"
End Function
Public Overridable Function Clone() As Object _
Implements ICloneable.Clone
Return New Point(X, Y)
End Function
End Class
Module Test
Sub Main()
Dim P1 As New Point(5, 5)
Dim P2 As Point
P2 = P1.Clone()
Console.WriteLine("First Object: " & P1.ToString())
Console.WriteLine("Cloned Object: " & P2.ToString())
End Sub
End Module
First Object: (5,5)
Cloned Object: (5,5)
Shallow copy
Public Class Point
Implements ICloneable
Public X as Integer
Public Y as Integer
Sub New(XX as Integer, YY as Integer)
X = XX
Y = YY
End Sub
Public Overloads Function ToString() As String
Return "(" & X & "," & Y & ")"
End Function
Public Overridable Function Clone() As Object _
Implements ICloneable.Clone
Return New Point(X, Y)
End Function
End Class
Public Class Line
Inherits Point
Public StartPoint As Point
Sub New(X As Integer, Y As Integer, Other As Point)
MyBase.New(X, Y)
StartPoint = Other
End Sub
Public Overloads Function ToString() As String
Return "(" & Me.X & "," & Me.Y & ")" & " Other: " & StartPoint.ToString()
End Function
Public Overrides Function Clone() As Object
Return New Line(Me.X, Me.Y, StartPoint)
End Function
End Class
Module Test
Sub Main()
Dim P as New Point(4, 5)
Dim P1 As New Line(3,4, P)
Dim P2 As Line
P2 = P1.Clone()
P2.StartPoint.X = 5
P2.StartPoint.Y = 4
Console.WriteLine("First Object: " & P1.ToString())
Console.WriteLine("Cloned Object: " & P2.ToString())
End Sub
End Module
First Object: (3,4) Other: (5,4)
Cloned Object: (3,4) Other: (5,4)