VB.NET将类实例复制到类实例中的temp
我正在学习VB.NET,我有一个关于复制类实例的问题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
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方法。谢谢!:)