Ver Mensaje Individual
  #5  
Antiguo 02-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 24
andres1569 Va por buen camino
Hola:

Voy a alargar un poco el tema de los "castings" (¡a ver si alguna estrella del espectáculo se mete a debatir aquí!),

Roman escribió:
Código:
type
  TUPGrid = class(TCustomGrid);
Este truco demuestra que estamos jugando con el compilador, porque ¿dónde están definidas en este código las propiedades Row y Col como public? Nos estamos valiendo sencillamente de la particular forma que tiene Delphi de definir el ámbito de las variables protegidas y privadas.

Si la sentencia de arriba la declaramos en una unit aparte, el cast sólo será válido dentro de esa unit, no en otras que quieran hacer uso de dicho truco, por mucho que la incluyamos en el Uses de esas otras.

La solución ideal (con permiso de Mr. B. Orlando) sería esta:

Código:
type
  TUPGrid = class(TCustomGrid)
  public
    property Col;
    property Row;
  end;
Ahora sí que el truco nos sirve para todo el proyecto.

¿No os ha llamado nunca la atención que Delphi permita acceder a variables privadas y protegidas de otros objetos siempre y cuando estén definidas en la misma unit, sin que sean necesariamente descendientes unos de otros? En un principio me pareció una flagrante violación de la regla de la encapsulación, aunque ahora doy fe de que esto es de una gran ayuda cuando se están declarando clases "hermanas", que necesitan acceder a las intimidades de otras (esto se ve claramente en las clases TDataset y TDataSource) sin que por ello se tenga que correr el riesgo de declarar ciertas propiedades o métodos como public.

Bueno, si alguien quiere aportar su opinión
Responder Con Cita