Hola.
Para algunos casos en particular, el uso del operador
is puede dar resultados no esperados, ya que este devuelve verdadero
tanto si el objeto pertenece a la clase, como si es desciende de ella.
Por ejemplo:
Código Delphi
[-]
var
Clase: TPersona;
begin
Clase:= TAlumno.Create;
if Clase is TPersona then
ShowMessage('TPersona')
else if Clase is TDocente then
ShowMessage('TDocente')
else
ShowMessage('TAlumno');
end;
Que muestra el mensaje 'TPersona' cuando el objeto creado es un TAlumno.
O también:
Código Delphi
[-]
var
Clase: TPersona;
begin
Clase:= TAlumno.Create;
if Clase is TAlumno then
ShowMessage('TAlumno');
if Clase is TDocente then
ShowMessage('TDocente');
If Clase is TPersona then
ShowMessage('TPersona')
end;
Donde la salida es 'TAlumno' y 'TPersona'.
En casos que pueden prestarse a confusiones, una buena alternativa es usar la función
ClassType que nos da dinámicamente
la referencia de clase del objeto:
Código Delphi
[-]
var
Clase: TPersona;
begin
Clase:= TAlumno.Create;
if Clase.ClassType = TPersona then
ShowMessage('TPersona');
if Clase.ClassType = TDocente then
ShowMessage('TDocente');
if Clase.ClassType = TAlumno then
ShowMessage('TAlumno');
end;
Un saludo.