Ver Mensaje Individual
  #8  
Antiguo 05-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Nada más un detalle respecto del ejemplo de dec. La clase contenedora se encarga de la construcción y destrucción del objeto Pruebas, es decir, le pertenece. Por tanto hay que proteger la propiedad contra cambios no deseados: si se asigna

DePruebas.Pruebas := ObjetoPruebas

estamos sustituyendo el objeto que originalmente pertenecía a DePruebas por otro y al hacer FPruebas.Free será este otro el que estemos destruyendo y el objeto original se habrá quedado atorado en memoria.

Normalmente, para este tipo de propiedades hay que definir un método set:

Código Delphi [-]
property Pruebas: TPruebas read FPruebas write SetPruebas

donde SetPruebas se encargará de copiar el contenido. Puede hacerlo campo por campo aunque lo usual es transferir ese copiado al método Assign de TPruebas:

Código Delphi [-]
type
  TPruebas
  public
    procedure Assingn(Source: TPersistent); override;
  end;

y dejar SetPruebas con:

FPruebas.Assign(Value);

// Saludos
Responder Con Cita