VB.Net Tutorial/Collections/ICloneable

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

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)