Clase Custom dentro de otra Clase Custom

252 views
Skip to first unread message

Antonio.xt

unread,
Jan 31, 2012, 5:02:17 PM1/31/12
to Comunidad de Visual Foxpro en Español

Que tal grupo, tengo el siguiente codigo que funciona sin problemas:

Creo una clase custom y la mando instanciar sin problemas, dentro de
esta clase mando llamar a otra, por ejemplo:

oObjeto1 = CREATEOBJECT("Objeto1)

DEFINE CLASS Objeto1 As Custom
Dato1 = ''
Dato2 = ''
Dato3 = ''
subObjeto = CREATEOBJECT("Objeto2")
ENDDEFINE

DEFIBE CLASS Objeto2 AS Custom
Dato2_1 = ''
Dato2_2 = ''
ENDDEFINE

Pero ahora como puedo definir e instanciar la clase Objeto1, siendo
que la subClase Objeto2 puedo requerirla N veces, y no solo 1 vez como
en la rutina actual ?

Carlos Miguel FARIAS

unread,
Jan 31, 2012, 5:14:27 PM1/31/12
to publice...@googlegroups.com
Dentro de tu clase contenedora, crea una clase collection, y las subclases las agregas a ese collection.
Podrias usar tambien un arreglo, la ventaja de la collection es que puede tener un indice por nombre (texto) para poder ubicarla, pero tambien lo podes simular con un arreglo de dos columnas.
Saludos: Miguel, La Pampa (RA)

Luis Maria Guayan

unread,
Jan 31, 2012, 5:45:00 PM1/31/12
to publice...@googlegroups.com
Antonio, debes trabajar con un objeto Collection. Mira este breve ejemplo de como quedaría tus Objeto1 y Objeto2 que lo puedes instanciar "n" veces con .Add

lo = CREATEOBJECT("Objeto1")
lo.oColl.ADD(CREATEOBJECT("Objeto2"))
lo.oColl.ADD(CREATEOBJECT("Objeto2"))
lo.oColl.ADD(CREATEOBJECT("Objeto2"))

*-- Recorro la coleccion
FOR EACH loI IN lo.oColl
  ? loI.Name, loI.Prop1
ENDFOR

lo = NULL


DEFINE CLASS Objeto1 AS CUSTOM
  Prop1 = ""
  Prop2 = ""
  oColl = NULL

  PROCEDURE INIT
    THIS.oColl = CREATEOBJECT("Collection")
  ENDPROC
ENDDEFINE


DEFINE CLASS Objeto2 AS CUSTOM
  Prop1 = ""
  PROCEDURE INIT
    THIS.Prop1 = SYS(2015)
  ENDPROC
ENDDEFINE

Saludos,


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Antonio.xt

unread,
Jan 31, 2012, 6:17:52 PM1/31/12
to Comunidad de Visual Foxpro en Español

Gracias Luis Maria y Miguel, es precisamente lo que necesitaba.

Saludos, y gracias por su apoyo...
> _________________________http://www.PortalFox.com

Antonio.xt

unread,
Jan 31, 2012, 7:10:01 PM1/31/12
to Comunidad de Visual Foxpro en Español

Disculpen, en el ejemplo en que parte se define la Clase Collection,
me imagino que con DEFINE CLASS pero que va a ir dentro de la
definicion ya que al crearse el objeto Collection se crea vacio, y no
se le agrega nada sino hasta que se instancia el Objeto2, que es el
que ira dentro del objeto Collection; es decir, ¿como y donde la
defino?

Gracias...

Luis Maria Guayan

unread,
Jan 31, 2012, 7:27:23 PM1/31/12
to publice...@googlegroups.com
La clase Collection no la defines ya que es nativa de VFP. La tienes que crear en el Init del primer objeto y de alli le agregas los Items de la colección, que pueden ser objetos, cadenas de caracteres, arrays. Accedes a ellos a traves de su índice como por ejemplo:

oObjeto.oCollection.Items(1).Name

o cuantos Items tiene:

?
oObjeto.oCollection.Count

Tambien puedes remover miembros de la coleccion con:

oObjeto.oCollection.Remove(1)




Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Reply all
Reply to author
Forward
0 new messages