Page 1 of 1

Clases de Harbour

Posted: Sun Apr 22, 2018 2:41 pm
by jvtecheto
Una curiosidad:

Las clases de Harbour porque al referirse a ellas se añaden los paréntesis.

Ejemplo creamos :

CREATE CLASS foo
VAR name INIT 'FOO'
ENDCLASS

y para referirnos a ella hariamos
foo():new()

otra cosa, todas las clases de Harbour son estáticas o sea se pueden utilizar sin instanciarlas.
no como en otros lenguajes en los que hay clases instanciables y otras estáticas o de clase(que no permiten su instanciación), ejemplo c#

que por ejemplo hay clases que hay que instanciar.

Form2 Ventana2 = new Form2();

o otras como Math , que accedes directamente. Math.SQrt(90); // Son Estaticas no instanciables.

siento estar un poco liado.

Saludos.

Jose Vte.

Re: Clases de Harbour

Posted: Sun Apr 22, 2018 4:29 pm
by jfgimenez
José Vicente,

en Harbour no existen las clases NO instanciables. Todas se pueden instanciar. Es más, la forma de instanciarlas es usando tan sólo la "función de clase". Así, para instanciar la clase foo, sólo hay que poner:

Code: Select all

oFoo := Foo()

Fíjate que no he puesto :New() ni nada por el estilo. Con sólo ejecutar la función de clase se instancia un objeto de esa clase. La llamada a :New() sirve para inicializar el objeto. Podíamos haber usado :Create(), :Init(), :Initialize(), o cualquier otra cosa, pero en Xailer decidimos que iba a ser :New(), y que ese método además iba a recibir parámetros de inicialización, que casi siempre es oParent. En cualquier caso, esto es una regla de Xailer, no de Harbour estrictamente, aunque otras librerías de Harbour también usan :New() con los mismos o con otros parámetros.

Por otro lado, también tenemos algunas clases que las crea el propio Xailer, y por lo tanto no hay que instanciarlas: Application, Screen, Printer y AppData

Re: Clases de Harbour

Posted: Sun Apr 22, 2018 6:36 pm
by jvtecheto
Muchisimas gracias Jose.

Cada dia se mas sobre Harbour. :D

Saludos.

Jose Vte.