속성을 설정할 수 없습니다
-
06-07-2019 - |
문제
내가 말했듯이 부동산의 재산을 설정하는 데 어려움이 있습니다. 거래를 나타내는 클래스가 있다고 가정 해 봅시다. 내 수업에는 다음과 같은 다른 클래스를 나타내는 속성이 있습니다.
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는 aif _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)
코드를 진행하십시오 ...