Não é possível a propriedade do conjunto de propriedades
-
06-07-2019 - |
Pergunta
Estou tendo problemas com, como eu disse, definindo a propriedade de uma propriedade. Vamos dizer que eu tenho uma classe que representa uma transação. Na minha classe eu tenho uma propriedade que representa uma outra classe, como este:
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
Então eu basicamente tem uma propriedade que tem um filtro get que recebe a pessoa apropriada. O problema é que quando eu quiser definir informações da Pessoa através da propriedade, VB parece ignorar que eu mesmo fiz isso, como esta:
Me.myPersonRecord.Person.Name = "Some Name"
Mas quando eu colocar um relógio no presente, depois de definir a propriedade, o meu valor não muda. Estou intrigado com esse comportamento. Existe algo que eu estou fazendo errado? Obrigado!
Solução
Cada vez que você faz um .MyPerson
get, o Person.GetAppropriatePerson
função é chamada.
Eu não sei a implementação dessa função, mas eu acho que ele retorna uma nova pessoa objeto de cada vez que ele é chamado.
Você pode alterar o nome de uma instância Pessoa. A próxima vez que você chamar .MyPerson
, outra instância pessoa fica retornado.
Dependendo de como isto é suposto para trabalhar, você pode fazer algumas coisas, por exemplo:
-
GetAppropriatePerson
chamada no construtor (se personid é conhecido na época). Atribuir o valor de retorno para_myPerson
, e tornar a propriedadeMyPerson
somente leitura. - Ou
_myPerson
initialize paranull
, em seguida, noMyPerson
getter Tem umif _myPerson == null Then _myPerson = GetAppropriatePerson etc.
Outras dicas
Eu não sei se é uma cópia n colar de erro, mas você parece estar substituindo _myPerson
cada vez na parte Get da propriedade. Isso seria mais do que provável causa o seu "Alguns Nome" para obter substituído: -)
Editar do'h, codeape diz a mesma coisa segundos antes de mim: -)
Um padrão comum para inicialização preguiçosa de imóveis como este é fazer algo como o seguinte, que verifica se o objeto é nulo antes de o substituir.
Public Property MyPerson as Person
Get
If _myPerson Is Nothing Then
_myPerson = Person.GetAppropriatePerson(Me.PersonID)
End If
return _myPerson
End Get
Você teria que mudar sua inicialização _myPerson
ser um dim _myPerson as Person
reta, em vez de dim _myPerson as New Person()
demasiado
Deve-se ficar alteradas por esta linha: _myPerson = Person.GetAppropriatePerson (Me.PersonID)
passo através de você código ...