Página 1 de 1

Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?

Publicado: Dom Ago 20, 2006 9:06 pm
por Xavi[1]
Al estilo IsKindOf( RUNTIME_CLASS(ClassName) ) del c++
Saber en runtime el tipo de clase Xailer de que se trata.
Por ejemplo saber si un dataset pasado a una función es TDbfDataSet o un
TMemDataSet.
Supongo que en Xailer se puede utilizar la variable Cargo de TComponent
cuando esta se incorpora al IDE pero no sé si en xHarbour o
Xailer existe algún otro método del estilo .-
TYPEOBJECT( oObj ) ==> 'TMemDataSet'
Gracias, un saludo.
Xavi

Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?

Publicado: Dom Ago 20, 2006 9:23 pm
por jlalin
Xavi,
tienes IsKindOf( oObject ) para saber si la clase pertenece a una
jerarquí­a concreta y también oObject:Classname para saber el nombre de
la clase a la que pertenece el objeto instanciado.
Saludos,
José Lalí­n

Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?

Publicado: Dom Ago 20, 2006 10:20 pm
por Xavi[1]
Muchas gracias.
Lo he probado con .-
oObj:IsKindOf( 'TMemDataSet' ) ) y MsgInfo( oObj:Classname )
y parece que funciona.
Un cordial saludo
Xavi

Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?

Publicado: Mar Ago 22, 2006 3:23 pm
por jlalin
Hola,
un amigo me ha pedido por privado que explique un poco las diferencias
entre :IsKindOf y :Classname, así­ que mejor lo hago aquí­ y lo aclaramos
para todos.
Supongamos una jerarquí­a como esta:
CLASS TAbuelo
|
+ CLASS TPadre FROM TAbuelo
| |
| + CLASS THijo FROM TPadre
|
+ CLASS TNieto FROM TAbuelo
Si preguntamos a un oHijo:IsKindOf( "TPadre" ) u oHijo:IsKindOf(
"TAbuelo" ) nos dirá que sí­ (.T.), puesto que deriva tanto de TPadre
como de TAbuelo.
Si preguntamos a oPadre:IsKindOf( "TAbuelo" ), también nos dirá que sí­
pero si le preguntamos oPadre:IsKindOf( "THijo" ) u oPadre:IsKindOf(
"TNieto" ), entonces ... os lo dejo como ejercicio.
Por otra parte, el método :className, sólo nos dice el nombre de la
clase a la que pertenece un objeto, tal que oHijo:className -> THijo,
pero no nos ofrece más información que esa.
Resumiendo, diremos que :IsKindOf nos dice si el objeto guarda alguna
relación con alguna clase ancestra (deriva de ella) mientras que
:className sólo nos dice el nombre de la clase.
Si alguno aún tiene alguna duda, no tiene más que preguntar.
Saludos,
José Lalí­n

Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?

Publicado: Mar Ago 22, 2006 10:05 pm
por Xavi[1]
Ejemplo práctico del método OnClick del menú en MDI Frame evitando tener que crear variables.-
METHOD MyChildForm( oSender, oMenu ) CLASS TMyMDIFrame
Local i
if( (i := AScan( ::oMDIClient:aForms, {|o| o:Classname=='TMyChildFrom' } )) > 0 )
::oMDIClient:aForms:SetFocus()
else
TMyChildFrom():New( Self ):Show()
endif
RETURN Nil
Gracias José, Un saludo
Xavi