Objeto Padre

01/11/2004 - 13:24 por Marcos | Informe spam
Alguien pdría ayudarme a completar este código para que cuando use los
MsgBox me aparezca el nombre correspondiente.
Quiero que cada Persona tenga un padre del mismo modo en qe se usa un
treenode

Gracias

sub jkldjfdl()
Dim p1 As New Persona("A")
Dim p1a As New Persona("A1")
Dim p1a1 As New Persona("A1A")
p1a.Personas.Add(p1a1)
p1.Personas.Add(p1a)
MsgBox(p1a.Parent.Nombre) 'Debería decir A
MsgBox(p1a1.Parent.Nombre) 'Debería decir A1
end sub

'Código

Public Class Persona
Private _Nombre As String
Private _Personas As Personas
Private _Parent As Object
Sub New(ByVal nombre As String)
_Personas = New Personas
_Nombre = nombre
End Sub
Public ReadOnly Property Nombre() As String
Get
Return _Nombre
End Get
End Property
Public ReadOnly Property Personas() As Personas
Get
Return _Personas
End Get
End Property
Public ReadOnly Property Parent() As Object
Get
Return _Parent
End Get
End Property
End Class

Public Class Personas
Inherits ArrayList
End Class

Preguntas similare

Leer las respuestas

#1 DJ GUAU
01/11/2004 - 20:01 | Informe spam
¿Es algun tipo de examen?

Guau..
Buscalo en el Google...


Alguien pdrà­a ayudarme a completar este código para que


cuando use los
MsgBox me aparezca el nombre correspondiente.
Quiero que cada Persona tenga un padre del mismo


modo en qe se usa un
treenode

Gracias

sub jkldjfdl()
Dim p1 As New Persona("A")
Dim p1a As New Persona("A1")
Dim p1a1 As New Persona("A1A")
p1a.Personas.Add(p1a1)
p1.Personas.Add(p1a)
MsgBox(p1a.Parent.Nombre) 'Deberà­a decir A
MsgBox(p1a1.Parent.Nombre) 'Deberà­a decir A1
end sub

'Código

Public Class Persona
Private _Nombre As String
Private _Personas As Personas
Private _Parent As Object
Sub New(ByVal nombre As String)
_Personas = New Personas
_Nombre = nombre
End Sub
Public ReadOnly Property Nombre() As String
Get
Return _Nombre
End Get
End Property
Public ReadOnly Property Personas() As Personas
Get
Return _Personas
End Get
End Property
Public ReadOnly Property Parent() As Object
Get
Return _Parent
End Get
End Property
End Class

Public Class Personas
Inherits ArrayList
End Class

.

Respuesta Responder a este mensaje
#2 Leonardo Azpurua
03/11/2004 - 03:43 | Informe spam
"Marcos" escribió en el mensaje
news:

Alguien pdría ayudarme a completar este código para que cuando use los
MsgBox me aparezca el nombre correspondiente.
Quiero que cada Persona tenga un padre del mismo modo en qe se usa un
treenode

Gracias

sub jkldjfdl()
Dim p1 As New Persona("A")
Dim p1a As New Persona("A1")
Dim p1a1 As New Persona("A1A")
p1a.Personas.Add(p1a1)
p1.Personas.Add(p1a)
MsgBox(p1a.Parent.Nombre) 'Debería decir A
MsgBox(p1a1.Parent.Nombre) 'Debería decir A1
end sub

'Código

Public Class Persona
Private _Nombre As String
Private _Personas As Personas
Private _Parent As Object
Sub New(ByVal nombre As String)
_Personas = New Personas
_Nombre = nombre
End Sub
Public ReadOnly Property Nombre() As String
Get
Return _Nombre
End Get
End Property
Public ReadOnly Property Personas() As Personas
Get
Return _Personas
End Get
End Property
Public ReadOnly Property Parent() As Object
Get
Return _Parent
End Get
End Property
End Class

Public Class Personas
Inherits ArrayList
End Class




Hola, Marcos:

No me hagas demasiado caso porque no lo he probado, pero cuando escribes:

p1.Personas.Add(p1a)

efectivamente estás incluyendo a <p1a> como un elemento de la lista de
personas de <p1>, pero nada mas. Necesitas informarle a <p1a> que su "Padre"
es <p1>.

Puedes redefinir la implementacion de Add en Personas (derivada de
ArrayList), para que se informara a cada nuevo elemento quien es su padre
(como en una telenovela de los años cincuenta), pero eso haria necesario que
Personas (una clase independiente) "sepa" en que instancia de Persona está
contenida. Y eso es demasiado follón (como una telenovela de los años
cincuenta).

Además, el que Persona contenga o no una coleccion de la clase Personas es
algo que cuanto menos se sepa, mejor.

De modo que te suguero que sea directamente Persona quien iomplemente un
metodo Add, mas o menos asi:

Class Persona:

' Al declarar esta sub como private, permites que otras
' instancias de la clase le asignen un valor al miembro
' _Parent de la instancia, y puedes conservar la propiedad
' Parent como Public ReadOnly

Private Sub SetParent(pParent As Persona)
_Parent = pParent
End Sub

Public Sub Add(pPersona As Persona)
pPersona.SetParent Me
Me.Personas.Add pPersona
End Sub

y luego:

Dim p1 As New Persona("A")
Dim p1a As New Persona("A1")
Dim p1a1 As New Persona("A1A")
p1a.Add(p1a1)
p1.Add(p1a)

No tiene sentido implementar una clase (como haces con Personas) que
simplemente herede de una clase base. Es mejor declarar las variables como
instancias de la clase base directamente (Private _Personas as ArrayList).

Salud!

Leonardo
mvp vb
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida