Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-05-2020
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Problema con "class of"

Necesito hacer algo como ésto, pero el compilador dice que así no...
Código:
Type
  Tuno = class 
    loquesea: integer;
  end;
  Tdos = class(Tuno) 
     mascosas: string;
  end;
  TunoClass = class of Tuno;
  TdosClass = class of Tdos;

var
   a: TunoClass;
begin
...
  if a is TdosClass then  <-  Error: Operator not applicable to this operand type
    ...
Responder Con Cita
  #2  
Antiguo 13-05-2020
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Acabo de probar (con Free Pascal) y el error que me devuelve es otro:

Código:
test.pas(19,8) Error: Class or COM interface type expected, but got "TunoClass"
Parece decir, en ambos casos, que el operador IS no funciona con CLASS OF. Si uso Tuno y Tdos directamente no obtengo error alguno.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 13-05-2020
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
¿Alguna idea de cómo hacerlo?
Responder Con Cita
  #4  
Antiguo 13-05-2020
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

El operador is verifica la clase de un objeto en tiempo de ejecución, pero en tu caso estas verificando "TunoClass" que no es una clase sino una Referencia de clase.


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-05-2020 a las 16:22:15.
Responder Con Cita
  #5  
Antiguo 13-05-2020
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Al final, la solución ha sido usar InheritsFrom, ya que funciona tanto con instancias como con clases. Ejemplo:
A. InheritsFrom(TDos)
Responder Con Cita
  #6  
Antiguo 13-05-2020
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Prescindiendo de is y dependiendo de lo que busques, también te funcionarán los métodos ClassName y ClassNameIs.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 08-06-2020
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Agrego a lo que respondieron, que no es claro el diseño de lo escrito, por lo que pregunto:
  • ¿Cuál sería la necesidad de definir TunoClass y TdosClass ?
  • ¿No te sirve evaluar "if a is Tuno..."?
¿?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 08-06-2020
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Cita:
Empezado por delphi.com.ar Ver Mensaje
Agrego a lo que respondieron, que no es claro el diseño de lo escrito, por lo que pregunto:
  • ¿Cuál sería la necesidad de definir TunoClass y TdosClass ?
  • ¿No te sirve evaluar "if a is Tuno..."?
¿?
No, en este caso no; se recibe una referencia a una clase, y a partir de ella hay que crear un objeto de la misma, pero de distinta forma. Créeme, en el caso real, tiene todo el sentido.
Como dije, lo resolví con InheritsFrom
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con Numero a Letra - Muestra "Un Mil" en vez de "Mil" Jovalca Varios 5 19-06-2014 15:42:01
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Problema en RAVE 6.0.2 RvLEModule.pas "Invalid class typecast". JoseQ Impresión 2 13-11-2007 12:40:02
Error "class String Not Valid" toro2186 OOP 9 26-07-2005 16:23:30
Error en previsualización:"Error raised exception class..." SGL Impresión 1 22-06-2005 12:28:16


La franja horaria es GMT +2. Ahora son las 02:36:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi