Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET将类实例复制到类实例中的temp_Vb.net_Oop_Instance - Fatal编程技术网

VB.NET将类实例复制到类实例中的temp

VB.NET将类实例复制到类实例中的temp,vb.net,oop,instance,Vb.net,Oop,Instance,我正在学习VB.NET,我有一个关于复制类实例的问题 Sub Main Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"} p.AddressInfo = new Address() With {.City = "Rome"} Dim p1 = p.Clone() p1.FirstName = "Steven" p1.AddressInfo.City = "Venice

我正在学习VB.NET,我有一个关于复制类实例的问题

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    p.AddressInfo = new Address() With {.City = "Rome"}

    Dim p1 = p.Clone()
    p1.FirstName = "Steven"
    p1.AddressInfo.City = "Venice"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p.AddressInfo.City)
    Console.WriteLine(p1.FirstName)
    Console.WriteLine(p1.AddressInfo.City)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String
    Public AddressInfo as Address

    Public Function Clone() as Person
        Dim temp = DirectCast(Me.MemberwiseClone(), Person) 
        temp.AddressInfo = DirectCast(Me.AddressInfo.Clone(), Address)
        return temp        
    End Function

End Class


Public Class Address
    Public City as String
    Public Function Clone() as Address
        return DirectCast(Me.MemberwiseClone(), Address) 
    End Function
End Class
例如,我有

Public Class frmMain_CLT

  Public Shared GEN_SETTING As MY_OBJ

  Public Sub frmMain_CLT_Load(sender As Object, e As EventArgs) Handles MyBase.Load          
    Dim Test_GM As MY_OBJ ' I would like to copy GEN_SETTING to Test_GM
  End Sub

End Class
我想将GEN_设置复制到Test_GM

我知道我可以使用“测试GM=GEN设置”。但是,Test_GM将参考GEN_设置。因此,当我在Test_GM中修改数据时,GEN_设置中的数据将发生变化

我想复制GEN_设置以测试_GM,它“不是”引用原始副本

但我不知道怎么做。我正在考虑使用DirectCast复制实例,但我遇到了错误

更新

我刚刚在MY_OBJ类中创建了Clone方法

比如说,

 Public Function ShallowCopy() As MY_OBJ
       Return DirectCast(Me.MemberwiseClone(), MY_OBJ)
    End Function 

但是,我不确定复制类实例是否是最好的方法。这通常是在原始类中实现一个函数来创建引用实例的克隆

比如说

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    Dim p1 = p.Clone()
    p1.FirstName = "Steven"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p1.FirstName)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String

    Public Function Clone() as Person
        return DirectCast(Me.MemberwiseClone(), Person) 
    End Function

End Class
在这里,您要求类
Person
的实例
p
使用基本函数MemberWiseClone()创建自身的克隆。如果要克隆的类包含对其他类的内部引用,事情就会变得更加复杂

例如,如果我们的类Person包含一个类
Address
的实例,那么您还需要为该类Address使用Clone方法,并调用Address.Clone在克隆的实例中创建Address类的另一个实例

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    p.AddressInfo = new Address() With {.City = "Rome"}

    Dim p1 = p.Clone()
    p1.FirstName = "Steven"
    p1.AddressInfo.City = "Venice"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p.AddressInfo.City)
    Console.WriteLine(p1.FirstName)
    Console.WriteLine(p1.AddressInfo.City)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String
    Public AddressInfo as Address

    Public Function Clone() as Person
        Dim temp = DirectCast(Me.MemberwiseClone(), Person) 
        temp.AddressInfo = DirectCast(Me.AddressInfo.Clone(), Address)
        return temp        
    End Function

End Class


Public Class Address
    Public City as String
    Public Function Clone() as Address
        return DirectCast(Me.MemberwiseClone(), Address) 
    End Function
End Class

关于这些概念的一个有趣的问题是

这通常是在原始类中实现一个函数来创建引用实例的克隆

比如说

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    Dim p1 = p.Clone()
    p1.FirstName = "Steven"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p1.FirstName)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String

    Public Function Clone() as Person
        return DirectCast(Me.MemberwiseClone(), Person) 
    End Function

End Class
在这里,您要求类
Person
的实例
p
使用基本函数MemberWiseClone()创建自身的克隆。如果要克隆的类包含对其他类的内部引用,事情就会变得更加复杂

例如,如果我们的类Person包含一个类
Address
的实例,那么您还需要为该类Address使用Clone方法,并调用Address.Clone在克隆的实例中创建Address类的另一个实例

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    p.AddressInfo = new Address() With {.City = "Rome"}

    Dim p1 = p.Clone()
    p1.FirstName = "Steven"
    p1.AddressInfo.City = "Venice"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p.AddressInfo.City)
    Console.WriteLine(p1.FirstName)
    Console.WriteLine(p1.AddressInfo.City)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String
    Public AddressInfo as Address

    Public Function Clone() as Person
        Dim temp = DirectCast(Me.MemberwiseClone(), Person) 
        temp.AddressInfo = DirectCast(Me.AddressInfo.Clone(), Address)
        return temp        
    End Function

End Class


Public Class Address
    Public City as String
    Public Function Clone() as Address
        return DirectCast(Me.MemberwiseClone(), Address) 
    End Function
End Class

关于这些概念的一个有趣的问题是

这通常是在原始类中实现一个函数来创建引用实例的克隆

比如说

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    Dim p1 = p.Clone()
    p1.FirstName = "Steven"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p1.FirstName)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String

    Public Function Clone() as Person
        return DirectCast(Me.MemberwiseClone(), Person) 
    End Function

End Class
在这里,您要求类
Person
的实例
p
使用基本函数MemberWiseClone()创建自身的克隆。如果要克隆的类包含对其他类的内部引用,事情就会变得更加复杂

例如,如果我们的类Person包含一个类
Address
的实例,那么您还需要为该类Address使用Clone方法,并调用Address.Clone在克隆的实例中创建Address类的另一个实例

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    p.AddressInfo = new Address() With {.City = "Rome"}

    Dim p1 = p.Clone()
    p1.FirstName = "Steven"
    p1.AddressInfo.City = "Venice"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p.AddressInfo.City)
    Console.WriteLine(p1.FirstName)
    Console.WriteLine(p1.AddressInfo.City)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String
    Public AddressInfo as Address

    Public Function Clone() as Person
        Dim temp = DirectCast(Me.MemberwiseClone(), Person) 
        temp.AddressInfo = DirectCast(Me.AddressInfo.Clone(), Address)
        return temp        
    End Function

End Class


Public Class Address
    Public City as String
    Public Function Clone() as Address
        return DirectCast(Me.MemberwiseClone(), Address) 
    End Function
End Class

关于这些概念的一个有趣的问题是

这通常是在原始类中实现一个函数来创建引用实例的克隆

比如说

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    Dim p1 = p.Clone()
    p1.FirstName = "Steven"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p1.FirstName)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String

    Public Function Clone() as Person
        return DirectCast(Me.MemberwiseClone(), Person) 
    End Function

End Class
在这里,您要求类
Person
的实例
p
使用基本函数MemberWiseClone()创建自身的克隆。如果要克隆的类包含对其他类的内部引用,事情就会变得更加复杂

例如,如果我们的类Person包含一个类
Address
的实例,那么您还需要为该类Address使用Clone方法,并调用Address.Clone在克隆的实例中创建Address类的另一个实例

Sub Main
    Dim p = new Person() With {.FirstName = "Steve", .LastName = "King"}
    p.AddressInfo = new Address() With {.City = "Rome"}

    Dim p1 = p.Clone()
    p1.FirstName = "Steven"
    p1.AddressInfo.City = "Venice"

    Console.WriteLine(p.FirstName)
    Console.WriteLine(p.AddressInfo.City)
    Console.WriteLine(p1.FirstName)
    Console.WriteLine(p1.AddressInfo.City)
End Sub

Public Class Person
    Public FirstName As String
    Public LastName as String
    Public AddressInfo as Address

    Public Function Clone() as Person
        Dim temp = DirectCast(Me.MemberwiseClone(), Person) 
        temp.AddressInfo = DirectCast(Me.AddressInfo.Clone(), Address)
        return temp        
    End Function

End Class


Public Class Address
    Public City as String
    Public Function Clone() as Address
        return DirectCast(Me.MemberwiseClone(), Address) 
    End Function
End Class

关于这些概念,一个有趣的问题是Hi钚的可能重复。不,这不是重复的问题。这个问题是关于“按参考传递”,这个问题是关于“按值传递”。无论如何,谢谢你的帮助,我有可能复制Hi-Polutonix。不,这不是重复的问题。这个问题是关于“按参考传递”,这个问题是关于“按值传递”。无论如何,谢谢你的帮助,我有可能复制Hi-Polutonix。不,这不是重复的问题。这个问题是关于“按参考传递”,这个问题是关于“按值传递”。无论如何,谢谢你的帮助,我有可能复制Hi-Polutonix。不,这不是重复的问题。这个问题是关于“按参考传递”,这个问题是关于“按值传递”。不管怎样,谢谢你的帮助。嗨,史蒂夫。谢谢你帮助我。我在考虑DirectCast方法。现在,它正在发挥作用。然而,我只是想知道DirectCast是否是最好的方式。谢谢:)MemberWiseClone需要DirectCast,否则您应该在新实例中逐个复制您的属性。嗯……是的,您是对的:)。我认为,我需要使用MemberWiseClone方法。谢谢!:)嗨,史蒂夫。谢谢你帮助我。我在考虑DirectCast方法。现在,它正在发挥作用。然而,我只是想知道DirectCast是否是最好的方式。谢谢:)MemberWiseClone需要DirectCast,否则您应该在新实例中逐个复制您的属性。嗯……是的,您是对的:)。我认为,我需要使用MemberWiseClone方法。谢谢!:)嗨,史蒂夫。谢谢你帮助我。我在考虑DirectCast方法。现在,它正在发挥作用。然而,我只是想知道DirectCast是否是最好的方式。谢谢:)MemberWiseClone需要DirectCast,否则您应该在新实例中逐个复制您的属性。嗯……是的,您是对的:)。我认为,我需要使用MemberWiseClone方法。谢谢!:)嗨,史蒂夫。谢谢你帮助我。我在考虑DirectCast方法。现在,它正在发挥作用。然而,我只是想知道DirectCast是否是最好的方式。谢谢:)MemberWiseClone需要DirectCast,否则您应该在新实例中逐个复制您的属性。嗯……是的,您是对的:)。我认为,我需要使用MemberWiseClone方法。谢谢!:)