Vb.net 如何通过值交换两个类,而不是引用?
Vb.net 如何通过值交换两个类,而不是引用?,vb.net,Vb.net,ArrayList中有两个类。我想交换它们的所有值,但不交换它们的引用。例如,arraylist1(1)在交换后引用同一个类,其值已更改 如果我这样改变它们 Dim someclass1 as new someclass Dim someclass2 as new someclass arraylist1(1) = someclass1 arraylist1(2) = someclass2 temp = arraylist1(1) arraylist1(1) = arraylist1(2) ar
ArrayList
中有两个类。我想交换它们的所有值,但不交换它们的引用。例如,arraylist1(1)在交换后引用同一个类,其值已更改
如果我这样改变它们
Dim someclass1 as new someclass
Dim someclass2 as new someclass
arraylist1(1) = someclass1
arraylist1(2) = someclass2
temp = arraylist1(1)
arraylist1(1) = arraylist1(2)
arraylist1(2) = temp
arraylist1(1)只是引用了someclass2,但实际上我希望它引用了具有someclass2值的someclass1。
现在我只需逐一交换它们的重要属性。您需要自己一个一个地复制属性。您可以通过向类中添加两个方法来简化此过程:
Public Class SampleClass
Public Property Id As Integer
Public Property Name As String
Public Function Clone() As SampleClass
Return New SampleClass With
{
.Id = Me.Id,
.Name = Me.Name
}
End Function
Public Sub Init(input As SampleClass)
With Me
.Id = input.Id
.Name = input.Name
End With
End Sub
Public Shared Sub SwapValues(value1 As SampleClass, value2 As SampleClass)
Dim temp = value1.Clone()
value1.Init(value2)
value2.Init(temp)
End Sub
End Class
然后在尝试交换值时:
SampleClass.SwapValues(list(0), list(1))
您必须自己编写代码来交换所有字段和属性。框架不会为您执行此操作。2018年谁会使用ArrayList?自VS2005以来,它一直是一种遗留类型,只是为了向后兼容。对象,而不是类。“例如,arraylist1(1)表示交换后的同一类”。相同的对象,不同的类。想想真实的世界。你和我都是人
Person
是类,而你和我是对象,即该类的实例。@JoelCoehoorn所以现在列表取代了它?