Ver Mensaje Individual
  #2  
Antiguo 05-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Reputación: 22
marto Va por buen camino
Wop!

De la primera, Delphi va a la dirección de memoria de la referencia, da por supuesto que es de la clase que le indicas e intenta acceder a la dirección del método o la propiedad en cuestión. Si la referencia no es de ese tipo, saltará un Access Violation.

De la segunda manera, Delphi comprueba (en ejecución, claro) que la referencia sea de la clase "prometida" o de un descendiente. Si no lo es la excepción es un poco más elegante: te dirá que no puede hacer el cast.

El primer sistema es más más rápido, así que, como normalmente no querrás que salga ninguna excepción, lo típico es el siguiete patrón:
Código Delphi [-]
  if Refencia is Clase then
    Clase(Referencia).LoQueSea
  else
    LoQueTeParezca;

No obstante, existen algunas circunstancias en las que no podrás hacer el cast directo (sin el "as"), por ejemplo si trabajas con variables de clase.
__________________
E pur si muove
Responder Con Cita