문제

내가 말했듯이 부동산의 재산을 설정하는 데 어려움이 있습니다. 거래를 나타내는 클래스가 있다고 가정 해 봅시다. 내 수업에는 다음과 같은 다른 클래스를 나타내는 속성이 있습니다.

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 필터가있는 속성을 가지고 있습니다. 문제는 속성을 통해 사람의 정보를 설정하고 싶을 때 VB가 다음과 같이 수행 한 것을 무시하는 것 같습니다.

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

그러나 이것에 대해 시계를 넣을 때, 속성을 설정 한 후에는 내 가치가 바뀌지 않습니다. 나는이 행동에 당황한다. 내가 잘못하고있는 일이 있습니까? 감사!

도움이 되었습니까?

해결책

당신이 할 때마다 .MyPerson, 함수 Person.GetAppropriatePerson 호출됩니다.

나는 그 기능의 구현을 모르지만, 그것이 호출 될 때마다 새로운 사람의 객체를 반환한다고 생각합니다.

한 사람의 이름을 변경합니다. 다음에 전화 할 때 .MyPerson, 다른 사람 인스턴스가 반환됩니다.

이것이 어떻게 작동하는지에 따라 몇 가지 작업을 수행 할 수 있습니다.

  • 부르다 GetAppropriatePerson 생성자에서 (그 당시 PersonID가 알려진 경우). 리턴 값을 _myPerson, 그리고 만들기 MyPerson 속성 읽기 전용.
  • 또는 초기화 _myPerson 에게 null, 그런 다음 MyPerson getter는 a if _myPerson == null Then _myPerson = GetAppropriatePerson etc.

다른 팁

복사 된 페이스트 오류인지는 모르겠지만, 당신은 덮어 쓰고있는 것 같습니다. _myPerson 매번 부동산의 일부를 얻습니다. 그것은 당신의 "일부 이름"이 덮어 쓰기를하게 될 것입니다 :-)

편집하다 Do'h, Codeape는 나보다 몇 초 만에 똑같은 말을합니다 :-)

이와 같은 속성의 게으른 초기화를위한 일반적인 패턴은 다음과 같은 것을 수행하는 것입니다. 이는 객체가 덮어 쓰기 전에 널리 늘어나지 않는지 확인합니다.

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() ~도

이 라인에 의해 변경되고 있어야합니다 : _myperson = person.getEpropriatePerson (me.personid)

코드를 진행하십시오 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top