Casa
Top.Mail.Ru Yandeks.Metrika
Foro: "principiantes";
Archivo actual: 2006.07.16;
Descargar: [xml.tar.bz2];

abajo

Destrucción de clases en clase Encontrar ramas similares


learner ©   (2006-06-27 18:38) [0]

Es decir algo como esto:
procedure MyClass.Kamikadze;
begin
FreeAndNil(Self);
end;



begin...end ©   (2006-06-27 18:41) [1]

Cual es la pregunta



Джо ©   (2006-06-27 18:56) [2]

> procedimiento MyClass.Kamikadze;
> comenzar
> FreeAndNil (Self);
> fin

¿Y cuál es el significado profundo de tal método?



Пусик ©   (2006-06-27 19:02) [3]


> alumno © (27.06.06 18: 38)


Ver procedimiento de clase



begin...end ©   (2006-06-27 19:04) [4]

> Iniciar © (27.06.06 19: 02) [3]

¿Por qué ver el "procedimiento de clase"?



Пусик ©   (2006-06-27 19:12) [5]


> comenzar ... finalizar © (27.06.06 19: 04) [4]
>> Pusik © (27.06.06 19: 02) [3] ¿Por qué necesito ver la clase "
> procedimiento "?


Y para no usar FreeAndnil. Según tengo entendido, esto es exactamente lo que quiere decir el autor.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TMyClass=class
 public
   class procedure KillSelf(var Obj: TMyClass);
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 MyObj: TMyClass;

implementation

{$R *.dfm}

{ TMyClass }

class procedure TMyClass.KillSelf(var Obj: TMyClass);
begin
 Obj.Free;
 Obj := nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Obj: TMyClass;
begin
 Obj := TMyClass.Create;
 Obj.KillSelf(Obj);
end;

end.



begin...end ©   (2006-06-27 19:16) [6]

> Iniciar © (27.06.06 19: 12) [5]

Todo esto está claro, pero qué se necesita exactamente clase procedimiento?



Джо ©   (2006-06-27 19:19) [7]

> [5] Pusik © (27.06.06 19: 12)
> procedure TForm1.Button1Click (Sender: TObject);
> var
> Obj: TMyClass;
> comenzar
> Obj: = TMyClass.Create;
> Obj.KillSelf (Obj);
> fin

Todo esto esta bien. Pero por qué, en este caso, no hacer el ridículo y no escribir simplemente:

procedure TForm1.Button1Click(Sender: TObject);
var
 Obj: TMyClass;
begin
 Obj := TMyClass.Create;
 FreeAndNil (Obj)
end;

?
La respuesta que ha dado a esta pregunta me tranquilizará y me hará feliz: 0)



learner ©   (2006-06-27 19:21) [8]

Pusik es un verdadero telépata.
Gracias.
> Joe
> ¿Y cuál es el significado profundo de tal método?
La codicia humana :)
Algo dentro no salió, ¡entonces nadie lo conseguirá!
Útil en el hogar :))



Пусик ©   (2006-06-27 19:25) [9]


> Todo esto está claro, pero ¿para qué es exactamente el procedimiento de clase?


Estoy de acuerdo En este caso, puedes prescindir de esto.



Leonid Troyanovsky ©   (2006-06-27 21:12) [10]


> alumno © (27.06.06 19: 21) [8]

> Algo en el interior no salió, ¡entonces nadie lo conseguirá!


En el interior, probablemente significaría "sin un enlace externo".
Por lo general, esta pregunta suena así: "cómo destruir un objeto
de su manejador. "Es decir, un análogo del método Release del formulario.
Eso, sollozos, pero se resuelve de manera similar. Ver por ejemplo
http://rsdn.ru/Forum/Message.aspx?mid=624577
Toda discusión es deseable.

--
Saludos, LVT.



learner ©   (2006-06-28 11:01) [11]

> Leonid Troyanovsky © (27.06.06 21: 12)
Por lo que yo entiendo (tal vez nada) en el enlace de arriba
Soluciones al problema. No solo necesito destruir el objeto, sino también restablecerlo
variable que lo crea. Confusamente sucedió. Algo como esto:
MyVar: = TMyClass.Create (... Tal vez algún tipo de referencia a una variable ...);
MyVar.DeleteSelf;
si MyVar = nil, entonces ShowMessage ("I" "am nil!");



ЮЮ ©   (2006-06-28 11:27) [12]

Pero en lugar de MyVar.DeleteSelf, debe escribir FreeAndNil (MyVar);

PD: nadie está obligado a seguir los enlaces al objeto, así como la presencia de los mismos en general.

PPS Si es tan difícil administrar objetos, mire el lado de las interfaces.



Leonid Troyanovsky ©   (2006-06-28 20:33) [13]


> alumno © (28.06.06 11: 01) [11]

> soluciones al problema. Necesito no solo destruir el objeto,
> pero también restablecer
> una variable que lo crea.


Esto es de hecho una falacia.
Bo, además de la variable que almacena el objeto recién creado,
es decir x: = TMyObject.Create, algunos pueden existir,
cuyo valor se obtiene por simple y: = x.
Bueno, incluso si logramos lidiar con x,
entonces puedes cumplir su papel, digamos, con y.Free.
Y, todo tipo de FreeAndNil allí no solucionará la situación.

Afortunadamente, hay una solución para este caso,
sin embargo, solo se aplica a los descendientes de TComponent.
Su nombre es Notificación de procedimiento; anular

--
Saludos, LVT.



Amoeba ©   (2006-06-29 12:12) [14]


> Afortunadamente, hay una solución para este caso,
> sin embargo, solo se aplica a los descendientes de TComponent.
> Su nombre es Notificación de procedimiento; anular

Más precisamente, se usa solo allí. Pero nada impide a su manera la realización de la ideología de la notificación en su propio conjunto de clases.



Páginas: 1 rama entera

Foro: "principiantes";
Archivo actual: 2006.07.16;
Descargar: [xml.tar.bz2];

arriba





Memoria: 0.6 MB
Tiempo: 0.032 c
11-1130412496
ROO
2005-10-27 15:28
2006.07.16
Crear componentes


8-1138909150
Pedernal-xnumx
2006-02-02 22:39
2006.07.16
archivos mp3


1-1149255880
tt
2006-06-02 17:44
2006.07.16
¿Cómo averiguar qué letra debajo del cursor en RichEdit?


15-1150206347
palva
2006-06-13 17:45
2006.07.16
Cómo instalar un complemento para DJVU


2-1151585789
Ja Rule
2006-06-29 16:56
2006.07.16
convertir formulario a marco





africaans albanés Arabic armenio Azerbaiyán vasco Bielorruso Bulgarian Catalán Chino (simplificado) Chino (tradicional) Croata Checo Danés Dutch Inglés Estonia filipina Finnish French
gallego georgiano Alemán Griego criollo haitiano Hebreo hindi Húngaro islandés Indonesian irlandés Italiano Japonés Korean letón lituano macedonio Malay maltés Noruego
persa polaco Portuguese Rumano Ruso Serbio Slovak Esloveno Español swahili Sueco Thai turco ucranio Urdu vietnamita galés yídish bengalí bosnio
cebuano esperanto gujarati hausa hmong igbo javanés kannada khmer lao latín maorí marathi mongol nepali punjabi somalí Tamil telugu yoruba
zulú
Английский Francés Alemán Italiano portugués Русский Español