Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con "class of" (https://www.clubdelphi.com/foros/showthread.php?t=94658)

Javierus 13-05-2020 11:14:50

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
    ...


Ñuño Martínez 13-05-2020 11:44:07

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.

Javierus 13-05-2020 13:00:41

¿Alguna idea de cómo hacerlo?

ecfisa 13-05-2020 15:18:57

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 :)

Javierus 13-05-2020 16:08:36

Al final, la solución ha sido usar InheritsFrom, ya que funciona tanto con instancias como con clases. Ejemplo:
A. InheritsFrom(TDos)

ecfisa 13-05-2020 16:28:33

Hola.

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

Saludos :)

delphi.com.ar 08-06-2020 17:08:01

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..."?
¿?

Javierus 08-06-2020 19:22:51

Cita:

Empezado por delphi.com.ar (Mensaje 537554)
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


La franja horaria es GMT +2. Ahora son las 13:43:26.

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