Tema: Casting
Ver Mensaje Individual
  #3  
Antiguo 16-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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.

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.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 16-02-2011 a las 08:25:12.
Responder Con Cita