none
請問一下,class怎麼做值拷貝動作(怎麼都是reference拷貝) RRS feed

  • 問題

  • Public Class Class1
        Public x As Int32
        Public Sub New(ByVal value As Int32)
            x = value
        End Sub

    End Class

     Sub Main()
            Dim o1 As New Class1(10)
            Dim o2 As New Class1(5)
            o2 = o1
            o1.x = 50
            Console.WriteLine(o2.x) 'output 50,refence拷貝

            Console.Read()

     End Sub

     Sub Main()
            Dim o1 As New Class1(10)
            Dim o2 As Class1
            o2 = o1
            o1.x = 50
            Console.WriteLine(o2.x) 'output 50,refence拷貝

            Console.Read()

     End Sub

    如何實現值的拷貝,我試來試去,怎麼都是reference拷貝

    如果c\c++語言的copy動作,如下:

    class1 a=new class1(10)

    class1 b=new class1(5)

    b=a;//reference拷貝(位址拷貝)

    *b=*a;//值的拷貝

    用vb 2005怎麼實現,謝謝大家解答

    2006年10月30日 上午 02:38

解答

  • 一般來講要複製一個 Class 的話用 ICloneable 來實作:

    Public Class Class1
        Implements ICloneable

        Public x As Int32
        Public Sub New(ByVal value As Int32)
            x = value
        End Sub

        Public Function Clone() As Object Implements System.ICloneable.Clone
            Return New Class1(Me.x)
        End Function
    End Class

        Sub Main()
            Dim o1 As New Class1(10)
            Dim o2 As Class1
            o2 = DirectCast(o1.Clone(), Class1)
            o1.x = 50
            MsgBox(o2.x.ToString())
        End Sub

     

    2006年10月30日 上午 03:18

所有回覆

  • 一般來講要複製一個 Class 的話用 ICloneable 來實作:

    Public Class Class1
        Implements ICloneable

        Public x As Int32
        Public Sub New(ByVal value As Int32)
            x = value
        End Sub

        Public Function Clone() As Object Implements System.ICloneable.Clone
            Return New Class1(Me.x)
        End Function
    End Class

        Sub Main()
            Dim o1 As New Class1(10)
            Dim o2 As Class1
            o2 = DirectCast(o1.Clone(), Class1)
            o1.x = 50
            MsgBox(o2.x.ToString())
        End Sub

     

    2006年10月30日 上午 03:18
  • VB2005 可使用序列化、反序列化來複製物件。

    請參閱 System.Runtime.Serialization

    2006年10月30日 上午 05:13
    版主