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