0

目标:填充一些文本框

问题:当第一个TextBox被填充时,下一个的值会受到影响。它分三个步骤发生。

第一步。假设我必须填写两个文本框。公共函数执行此操作:

Public Sub FillingTextBoxes(Name As String) 
    'Fetching my object from a collection
    Dim newObject As MyClass = MyCollection.Item(Name)

    'Filling two textboxes
    With newObject 
        TextBox1.Text = .Property1.ToString
        TextBox2.Text = .Property2.ToString

MyCollection 是一个公开的Microsoft.VisualBasic.Collection.

第二步。填充TextBox1触发TextChanged事件。另一个公共函数更改同一对象的值:

Public Sub SomeOtherFunction(Name As String) 
    Dim newObject As MyClass = MyCollection.Item(Name)
    newObject.Property2 = "something else"

第三步,来了。SomeOtherFunction完成运行时,返回FillingTextBoxes的值newObject.Property2是 now "something else",即使这发生在另一个函数中。

我怎么可能解决这个问题?

4

1 回答 1

2

如果您在集合中存储的是自定义类,那么您需要实现一个clone允许深度复制的函数。

克隆功能允许您获取对象引用并返回相同类型的新副本,该副本是对不同对象的新引用。例如,如果你有这个:

public class MyClass

    public Property1 as string
    public Property2 as string

    public sub new()
        Property1 = string.empty
        Property2 = string.empty
    end sub

    public function clone() as MyClass
        dim returnThis as new MyClass

        returnThis.Property1 = Property1
        returnThis.Property2 = Property2        

        return returnThis
    end function

end class

然后你可以像这样调用一个新的深拷贝:

Public Sub SomeOtherFunction(Name As String) 
    Dim newObject As MyClass = MyCollection.Item(Name).clone()
    newObject.Property2 = "something else"

而且您不会有任何问题,因为您使用的是同一对象的新副本,而不是集合中的引用。

于 2013-02-01T14:05:16.837 回答