VB.Net Tutorial/Collections/ICloneable

Материал из VB Эксперт
Перейти к: навигация, поиск

Deep Clone

<source lang="vbnet">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</source>

First Object: (3,4) Other: (4,5)
Cloned Object: (3,4) Other: (5,4)

ICloneable

<source lang="vbnet">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</source>

First Object: (5,5)
Cloned Object: (5,5)

Shallow copy

<source lang="vbnet">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</source>

First Object: (3,4) Other: (5,4)
Cloned Object: (3,4) Other: (5,4)