无法设置属性的属性

时间:2009-06-22 13:44:55

标签: vb.net properties set setter

正如我所说,设置房产的财产我遇到了麻烦。假设我有一个代表交易的类。在我的课堂上,我有一个代表另一个类的属性,例如:

Public Class PersonRecord

    _myPerson = new Person()

    Public Property MyPerson as Person
    Get
        _myPerson = Person.GetAppropriatePerson(Me.PersonID)

        return _myPerson
    End Get

    Set
        _myPerson = value
    End Set
    End Property

所以我基本上有一个属性,它有一个get过滤器,可以找到合适的人。问题是,当我想通过属性设置Person的信息时,VB似乎忽略了我甚至做到了,例如:

Me.myPersonRecord.Person.Name = "Some Name"

但是当我对此进行监视时,在设置属性后,我的值不会改变。我对这种行为感到困惑。有什么我做错了吗?谢谢!

3 个答案:

答案 0 :(得分:7)

我不知道它是否是一个复制和粘贴错误,但是每次在属性的Get部分中,您似乎都会覆盖_myPerson。这很可能会导致你的“某些名字”被覆盖: - )

编辑 do'h,codeape在我面前说了几句话: - )

像这样延迟初始化属性的常见模式是执行类似下面的操作,在覆盖之前检查对象是否为null。

Public Property MyPerson as Person
Get
    If _myPerson Is Nothing Then
        _myPerson = Person.GetAppropriatePerson(Me.PersonID)
    End If
    return _myPerson
End Get

您必须将_myPerson初始化更改为直线dim _myPerson as Person,而不是dim _myPerson as New Person()

答案 1 :(得分:4)

每次执行get .MyPerson时,函数Person.GetAppropriatePerson都会被调用。

我不知道该函数的实现,但我猜它每次调用它都会返回一个新的Person对象。

您更改一个Person实例的名称。下次调用.MyPerson时,将返回另一个Person实例。

根据这应该如何工作,您可以做一些事情,例如:

  • 在构造函数中调用GetAppropriatePerson(如果当时知道personid)。将返回值分配给_myPerson,并将MyPerson属性设置为只读。
  • 或者将_myPerson初始化为null,然后在MyPerson获取者中if _myPerson == null Then _myPerson = GetAppropriatePerson etc.

答案 2 :(得分:1)

这一行必须改变: _myPerson = Person.GetAppropriatePerson(Me.PersonID)

逐步完成代码...