Cita:
Empezado por roman
Te entiendo, pero no estoy de acuerdo por dos razones:
1. Quien se pone nulo no es el objeto sino una referencia al objeto.
...
2. Como no sea una suerte de patrón singleton, por lo general puedes tener varias instancias de una misma clase.
|
Bueno eso ya sabemos amigo roman y eso no está en discucion...

no mezclemos las cosas
Cita:
Empezado por roman
Por otra parte,
...
no es que sea más elegante, sino que es fundamentalmente distinta. Mi variable privada se anula fuera de la clase y lo hace quien creo la instancia.
Yo diría, en una especie de resumen, que las referencias a un objeto son entidades ajenas a la clase del objeto (y al objeto mismo).
|
Haber... tú mismo criticaste el hecho de que se usara la
variable global que genera Delphi a crear un formualrio, pero si analizamos tu solucion pues basicamente hace lo mismo, claro ahora ya no es una variable Global sino privada

, pero de igual manera se la está usando practicamente para hacer lo mismo, pero mejor me explico con un ejemplo siguiendo tu propia solución:
Si por ejemplo instanciaramos un objeto de la clase "TChildForm" de la siguiente forma:
Código Delphi
[-]
if otroForm = nil then begin
otroForm := TChildForm.Create(Self);
otroForm.FreeNotification(Self);
end;
otroForm.Show;
Para que tu solucion funcione tambien con "OtroForm" deberiamos modifcar el método Notification de la siguiente forma:
Código Delphi
[-]procedure TParentForm.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (AComponent = ChildForm) and (Operation := opRemove) then
ChildForm := nil;
if (AComponent = OtroForm) and (Operation := opRemove) then
OtroForm := nil;
end;
Eso quiere decir que por cada
nueva referencia tengo que aumentar código al método Notification..y eso no es ideal amigo seamos realista.

En otras palabras estamos
restringidos a crear un objeto
solo atraves de la variable "ChildForm", si quisieramos que la cosa siga funcionando y evitar agregar más código; y..pues es practicamente lo mismo que hacer uso de la varible global que gerera delphi, asi que por ese lado no hay diferencia.

Bueno... para no hacerla muy larga la cuestion...pues voy a volver a hacer la pregunta:
¿Es posible implementar una solucion que esté
dentro de la misma clase sin utilizar alguna variable en sí? es decir al momento de Destruir(Action:=caFree

el Objeto hacer que la referencia del objeto sea nula(nil)??

¿será posible eso?
