Ver Mensaje Individual
  #16  
Antiguo 03-01-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Vaya lío con esto del operador As. Primero que nada, va mi sugerencia de utilizar el término molde de tipo para referirse a "type cast".

Como ya lo aclaró Antonio, el molde de tipo con el operador As, presenta dos verificaciones de seguridad; una de compilación y otra en tiempo de ejecución. Al compilar se verifica que el tipo de dato usado y el tipo de dato declarado del objeto sean clases con relación jerárquica lineal (padre-hijo, abuelo-nieto, misma clase, etc., pero no tío-sobrino, primo-primo, etc.). En tiempo de ejecución, se realiza una verificación de polimorfismo: que el objeto sea de la clase indicada, de una clase derivada de ella o un puntero nulo (Nil).

Mientras que un molde de tipo clásico (yo los conocía desde Turbo Pascal), al estilo "Clase (Objeto)", no impide que el programa compile y se ejecute la sentencia donde aparezca tal expresión. Pero eso sí, el resultado puede ser impredecible si no estamos completamente seguros de lo que estamos moldeando.

Me permito añadir aquí una humilde traducción al español de lo que dice la ayuda de Delphi sobre el operador As:

Cita:
El operador as efectúa moldes de tipo verificados. La expresión

Objeto as Clase

devuelve una referencia al mismo objeto que Objeto, pero con el tipo dado por Clase. En tiempo de ejecución, Objeto debe ser una instancia de la clase denotada por Clase o de una de sus descendientes, o bien Nil; de otra forma se eleva una excepción. Si el tipo declarado de Objeto no está relacionado a Clase —es decir, si los tipos son distintos y uno no es ancestro del otro—, ocurre un error de compilación.
(Saludo as TAbrazo).Ejecutar;

Al González.
Responder Con Cita