![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Perdona mi ignorancia pero, ¿cómo puedo adaptarlo a mi programa?
Supongamos que tengo un formulario y dos clases: Form1, cClase2, cClase3. Form1:
Unit2:
Unit3:
Lo que yo quiero es crear el objeto de la clase cClase3 nada más inicializarse la aplicación para que luego cuando pulse al botón el objeto ya esté creado (como he dicho al principio prescindiendo de un módulo de datos). |
|
#2
|
||||
|
||||
|
Cita:
![]() |
|
#3
|
|||
|
|||
|
Lo tengo y funciona, muchas gracias.
Form1:
Unit2:
Unit3:
Última edición por noob fecha: 15-02-2009 a las 23:21:05. |
|
#4
|
||||
|
||||
|
De nada Noob, gracias a ti por hacer buenas preguntas. Así es como los foros de Club Delphi se han convertido en un deslumbrante acervo de información técnica.
Por cierto, te recomiendo usar Free en lugar de Destroy, por las razones que se explican en varios hilos que hablan de ello. Un saludo. Al. |
|
#5
|
|||
|
|||
|
A veces pienso que mis preguntas son un tanto rebuscadas.
Edito y tomo nota. Última edición por noob fecha: 15-02-2009 a las 23:20:49. |
|
#6
|
||||
|
||||
|
Formalmente lo que buscas es un Singleton. Y la forma en llevarlo a cabo es redefiniendo el método de clase NewInstance y el método FreeInstance.
Luego, debes tener una variable que se puede o no, mantener "oculta" que sea del tipo de la clase definida. ¿Para qué? Para que la implementación de NewInstance pueda chequear si existe una instancia de dicha clase, si existe se devuelve dicha instancia, en otro caso se crea. FreeInstance liberará la instancia. Más o menos la idea es algo como esto:
Ahora si deseas puedes hacer que se cree y se libere dicha instancia en sus secciones Initialization y Finalization. Luego puedes tener cuantas variables donde necesites, cuando hagas algo como:
Variable apuntará a "Instancia". Luego si haces,
Liberas al objeto global, es decir a "Instancia". Se puede modificar un poco el código para no liberar de una, y llevar un contador de las veces que se referencie: NewInstance incrementa el contador, mientras que FreeInstance lo decrementa. Nomás te cuento esto como alternativa. Hay muchas maneras de implementar un singleton. La forma que comentó Al es una de ellas. Pero funcionará siempre y cuando usemos la variable que se declara en Interface. Si uno tiene otra variable de la misma clase, puede correr el riesgo de crearla y liberarla, por tanto habrá dos instancias y se rompe el esquema de la variable global (y única). Ojo, que con el esquema que menciona Al, no hay que liberarla nunca sino dejar que el sistema al finalizar solito se encargue de ello. Saludos, |
|
#7
|
|||
|
|||
|
@Delphius he estado usando el esquema de Al pero voy a usar lo que me has recomendado por el tema de no crear más que una instancia.
Cuatro cosas: 1) ¿TSigleton ha de ser mi clase cClase3? 2) He visto que redefines los métodos NewInstance y FreeInstance pero la clase TSingleton no hereda de ninguna otra, ¿qué se redefine entonces? 3) ¿Variable := TSingleton.Create; y Variable.Free; lo he poner en las secciones de inicialización y finalización de mi clase singleton? 4) ¿Quedaría así?
Saludos. Última edición por noob fecha: 16-02-2009 a las 22:02:05. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Calentamiento global | Crandel | La Taberna | 0 | 20-01-2008 16:13:14 |
| Hook global | pepelaalfa | API de Windows | 2 | 08-12-2005 18:24:27 |
| Variable global | jluisx | OOP | 3 | 27-10-2005 22:31:22 |
| variable global existe en php ? | sarga | PHP | 1 | 27-06-2004 17:47:07 |
| Procedimiento global | Carlos Arevalo | Varios | 2 | 17-11-2003 18:55:00 |
|