Cristobal,
otra cosa más de Harbour que descubrimos! Gracias por la referencia. Pensé que la funcionalidad del 'init' era la del constructor. De todas maneras el plan era no reescribir el constructor, ni su equivalente.
He puesto un ejemplo y al parecer no funciona... Algo debo haberme perdido...
Antonio,
tu idea es la que tuve al principio, pero creo que de esa manera la nueva data oculta la data original, 'desperdiciando' un slot de la variable original.
Funciona, es la que voy a usar hasta que encuentre una mejor.
Lo que comento se puede probar con este código:
#include "hbclass.ch"
CLASS TClassA
DATA uVar INIT 'X'
METHOD New() CONSTRUCTOR
METHOD Init()
ENDCLASS
METHOD New() CLASS TClassA
RETURN Self
METHOD Init() CLASS TClassA
::uVar := 'Z'
RETURN NIL
CLASS TClassB FROM TClassA
DATA uVar INIT 'Y'
ENDCLASS
FUNCTION Main()
LOCAL tValue, dValue, aStruct
LOCAL a:= TClassA():New()
LOCAL b:= TClassB():New()
? Len(a), Len(b), a:uVar, b:uVar // 1, 2, X , Y (TClassA No llama automáticamente a Init !!!!)
Inkey(0)
QUIT
La alternativa de reescribir el constructor no es tan mala con el uso de '...'
#include "hbclass.ch"
CLASS TClassA
DATA uVar INIT 'X'
METHOD New() CONSTRUCTOR
METHOD Init()
ENDCLASS
METHOD New() CLASS TClassA
RETURN Self
METHOD Init() CLASS TClassA
::uVar := 'Z'
RETURN NIL
CLASS TClassB FROM TClassA
METHOD New() CONSTRUCTOR
ENDCLASS
METHOD New(...) CLASS TClassB
::Super:New(...)
::uVar := 'Y'
RETURN Self
FUNCTION Main()
LOCAL tValue, dValue, aStruct
LOCAL a:= TClassA():New()
LOCAL b:= TClassB():New()
? Len(a), Len(b), a:uVar, b:uVar
Inkey(0)
QUIT