¡Hola!
Para mí también fue un descubrimiento reciente, creo haberlo visto hace tiempo en la unidad Grids.pas.
Cita:
Empezado por esocrates
...¿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 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.
