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
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?
Hay alguna manera de saber el nombre, tipo, derivación de una clase en runtime?
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
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?
Muchas gracias.
Lo he probado con .-
oObj:IsKindOf( 'TMemDataSet' ) ) y MsgInfo( oObj:Classname )
y parece que funciona.
Un cordial saludo
Xavi
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?
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
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?
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
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