Ver Mensaje Individual
  #5  
Antiguo 02-07-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
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
¡Hola!

Para mí también fue un descubrimiento reciente, creo haberlo visto hace tiempo en la unidad Grids.pas.

Cita:
Empezado por esocrates Ver Mensaje
...¿Pueden explicarme de qué se trata esto?...
En el ejemplo dado por Román, se define un clase de nombre TMiObjeto en la cual se declaran dos propiedades —X y Y—. Esto quiere decir que, teniendo una variable objeto O instanciada de tipo TMiObjeto, podríamos escribir en el código O.X u O.Y para leer esas propiedades del objeto.

Lo interesante es que el especificador de acceso Read (el cual sirve para indicarle al compilador de dónde o cómo el programa va a obtener el valor de la propiedad a la hora de ejecutarse una expresión como las mencionadas), en este caso no indica meramente el nombre de un campo o de un método función, que es lo más común.

Es raro toparse con una declaración de propiedad donde uno de sus especificadores de acceso (Read o Write) se refiere a un elemento particular de uno de sus campos y no al campo en su totalidad. No obstante es válido, según se ha visto.

Si utilizamos la opción Find in Files del entorno de Delphi y, con la opción Regular expressions marcada, buscamos la cadena

Property .* Read .*\..*;

en los archivos fuentes de la VCL, encontraremos algunos ejemplos.

Este hilo me hizo reflexionar un poco más sobre el tema, llevándome a pensar que el compilador admite cualquier referencia "estática" de valor estructurado, mientras el punto de partida sea un campo propio de la clase y los tipos de datos sean iguales, pero sin importar la profundidad de dicha referencia. Por lo tanto el siguiente código debe también compilar sin problemas:

Código Delphi [-]
Type
  TR = Record
    A, B :Integer;
  End;
 
  T1 = Class
    Protected  // o Private
      FRs :Array [1..2] Of TR;
    Public
      Property A1 :Integer Read FRs [1].A;
      Property A2 :Integer Read FRs [2].A;
  End;

Interesante tema, Román.

Un abrazo específico.

Al González.
Responder Con Cita