复制一个类实例

时间:2013-11-10 04:11:09

标签: vb.net

Soo,我有一个组合框,它具有自定义对象列表(“Person”类)作为数据源。我已将Person.Name映射为DisplayMember,对象是选定的值。

当有人选择“Bob”并按下ChoosePerson时,我想带这个人,复制它,并使用duplicata来做事情。

下面是解释它的代码:

 Private Sub ChoosePerson_Click(sender As Object, e As EventArgs) Handles ChoosePerson.Click
    Dim p As Person= CType(cbPerson.SelectedValue, Person)
    MyChosenList.Add(ChoseAPerson(m))
    cbPerson.SelectedIndex() = 0
End Sub

Private function ChoseAPerson(byval p as Person) as Person
   Dim newPerson as Person = p 
   newPerson.name = "ANewPerson_"  & p.Name
   Return newPerson
End function

现在,如果我回到我的组合框cbPerson,我之前选择的人(bob)的名字将替换为“ANewPerson_bob”

我怎样才能确保我添加到myChosenList的“bob”人是Person类的不同实例?

编辑

我在谷歌上添加了一点侦察,找到正确的方法来克隆我的对象,因为@dotNET建议它

Public Function Clone() As Object Implements ICloneable.Clone
    Return DirectCast(MemberwiseClone(), Person)
End Function

2 个答案:

答案 0 :(得分:2)

解决此问题的标准方法是实现IClonable然后Clone()方法来创建对象的副本。然后在你的代码中写下:

Dim p As Person= CType(cbPerson.SelectedValue, Person).Clone()

基本问题是人是一个,因此通过引用而不是值复制。创建新引用仍指向同一物理对象。

答案 1 :(得分:0)

而不是这样做:

Dim newPerson as Person = p 

您需要为Person编写一个复制构造函数,并执行以下操作:

Dim newPerson as New Person(p)