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:
procedimiento MyClass.Kamikadze; comenzar FreeAndNil (Self); fin



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.

unidad Unit1; interfaz usos Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formularios, Diálogos, StdCtrls; tipo TMyClass = clase publico procedimiento de clase KillSelf (var Obj: TMyClass); fin TForm1 = clase (TForm) Button1: TButton; procedimiento Button1Click (Remitente: TObject); privado {Declaraciones privadas} publico {Declaraciones públicas} fin var Form1: TForm1; MyObj: TMyClass; implementación {$ R * .dfm} {TMyClass} procedimiento de clase TMyClass.KillSelf (var Obj: TMyClass); comenzar Obj.Free; Obj .: = nulo; fin procedimiento TForm1.Button1Click (remitente: TObject); var Obj: TMyClass; comenzar Obj: = TMyClass.Create; Obj.KillSelf (Obj); fin fin



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:
procedimiento TForm1.Button1Click (remitente: TObject); var Obj: TMyClass; comenzar Obj: = TMyClass.Create; FreeAndNil (Obj) fin
?
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.61 MB
Tiempo: 0.038 c
9-1131902146
Xcoder
2005-11-13 20:15
2006.07.16
Después de instalar WindowsXP, SP2 OpenGL se volvió lento


1-1149066270
Laymer
2006-05-31 13:04
2006.07.16
Paso del mouse


2-1151305265
novill
2006-06-26 11:01
2006.07.16
¿Cómo averiguar el tamaño de un archivo de texto (Textfile)?


2-1151329549
novill
2006-06-26 17:45
2006.07.16
Directorio actual de servicio (s)?


11-1130397427
Dodfr
2005-10-27 11:17
2006.07.16
Error en TStrList.IndexOfName





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 Francés
gallego georgiano Alemán Griego criollo haitiano hebreo hindi Húngaro islandés Indonesian irlandés Italiana 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