Differenze tra le versioni di "Metodi New() e Free() degli oggetti"
Riga 14: | Riga 14: | ||
* _Free() viene chiamato giusto nella fase finale di eliminazione dell'oggetto dalla memoria. Può essere utilizzato, ad esempio, per terminare un ''timer'' (se si verifica un errore), oppure per chiudere un'attività, a prescindere dal resto. | * _Free() viene chiamato giusto nella fase finale di eliminazione dell'oggetto dalla memoria. Può essere utilizzato, ad esempio, per terminare un ''timer'' (se si verifica un errore), oppure per chiudere un'attività, a prescindere dal resto. | ||
− | Nel primo metodo, si possono quindi definire e impostare i valori base e le proprietà dell'oggetto, e questo anche se è un'oggetto grafico (es. una ''Form''). | + | Queste due funzioni, dunque, sono sempre e comunque chiamate (indipendentemete se dichiarate esplicitamente nel codice o meno) da Gambas, quando l'oggetto viene creato e distrutto, anche se non sono presenti nel codice dell'oggetto, perchè esistono comunque nella classe base di tutti gli oggetti creati in gambas (''Object''). |
+ | |||
+ | ===Il metodo ''_New()''=== | ||
+ | Nel primo metodo, si possono quindi definire e impostare i valori base e le proprietà dell'oggetto, e questo anche se è un'oggetto grafico (es. una ''Form''). | ||
+ | |||
+ | ===Il metodo ''_Free()''=== | ||
+ | Il secondo metodo è utilizzabile per pulire determinate situazioni (es. una connessione), che magari non sono state completate correttamente a causa di un'errore nella classe. Il metodo ''_Free()'' è in pratica il distruttore della classe, cioè viene chiamato un attimo prima che questa venga eliminata dalla memoria, ed è utile per pulire l'oggetto da riferimenti ad altre classi, o per chiudere eventuali aperture di ''stream''. | ||
+ | |||
+ | All'interno di questo metodo, bisogna controllare (un ''IF'' di controllo può bastare sicuramente) se le variabili e le proprietà dello stesso siano ancora valide, ovvero non siano già state ''Nullate'' dalla procedura automatica di eliminazione dell'oggetto. Infatti potrebbe esserci una proprietà della classe che si sta cancellando, che punta ad un oggetto esterno che non è più valido. In questo caso, andando ad effettuare dei controlli su questa proprietà, in realtà si potrebbero trovare in due stadi: | ||
+ | <BR>1) ancora valida, ovvero il riferimento punta ad un oggetto ancora valido; | ||
+ | <BR>2) l'oggetto non esiste più, per cui il riferimento contiene un indirizzo non più valido, e quindi si potrebbe trovare ''Null'' oppure qualcosa di indefinito. In quest'ultimo caso è possibile usare i metodi di ''Object'', per controllare in che stato l'oggetto sia. | ||
− | |||
+ | ===Passare dati ad un oggetto=== | ||
Se si intende passare dati, è possibile scrivere la funzione in questo modo: | Se si intende passare dati, è possibile scrivere la funzione in questo modo: | ||
'''Public''' Sub <FONT color=#B22222>_New</font>(parm1 as String, parm2 AS String, ..., parm3 AS Integer) | '''Public''' Sub <FONT color=#B22222>_New</font>(parm1 as String, parm2 AS String, ..., parm3 AS Integer) |
Versione delle 05:55, 23 mag 2013
Ogni oggetto ha alcuni metodi che possono essere utilizzati tranquillamente, e che corrispondono a precise fasi della vita dell'oggetto. |1| |2|
Quelli più importanti, sono:
Public Sub _New()
e
Public Sub _Free()
rispettivamente:
- _New(): creazione dell'oggetto;
- _Free(): distruzione dell'oggetto;
- _New() può essere usato per passare dei parametri all'oggetto, proprio nella fase di creazione (non di apertura), e può essere utilizzato anche per creare oggetti all'interno di una Form.
- _Free() viene chiamato giusto nella fase finale di eliminazione dell'oggetto dalla memoria. Può essere utilizzato, ad esempio, per terminare un timer (se si verifica un errore), oppure per chiudere un'attività, a prescindere dal resto.
Queste due funzioni, dunque, sono sempre e comunque chiamate (indipendentemete se dichiarate esplicitamente nel codice o meno) da Gambas, quando l'oggetto viene creato e distrutto, anche se non sono presenti nel codice dell'oggetto, perchè esistono comunque nella classe base di tutti gli oggetti creati in gambas (Object).
Il metodo _New()
Nel primo metodo, si possono quindi definire e impostare i valori base e le proprietà dell'oggetto, e questo anche se è un'oggetto grafico (es. una Form).
Il metodo _Free()
Il secondo metodo è utilizzabile per pulire determinate situazioni (es. una connessione), che magari non sono state completate correttamente a causa di un'errore nella classe. Il metodo _Free() è in pratica il distruttore della classe, cioè viene chiamato un attimo prima che questa venga eliminata dalla memoria, ed è utile per pulire l'oggetto da riferimenti ad altre classi, o per chiudere eventuali aperture di stream.
All'interno di questo metodo, bisogna controllare (un IF di controllo può bastare sicuramente) se le variabili e le proprietà dello stesso siano ancora valide, ovvero non siano già state Nullate dalla procedura automatica di eliminazione dell'oggetto. Infatti potrebbe esserci una proprietà della classe che si sta cancellando, che punta ad un oggetto esterno che non è più valido. In questo caso, andando ad effettuare dei controlli su questa proprietà, in realtà si potrebbero trovare in due stadi:
1) ancora valida, ovvero il riferimento punta ad un oggetto ancora valido;
2) l'oggetto non esiste più, per cui il riferimento contiene un indirizzo non più valido, e quindi si potrebbe trovare Null oppure qualcosa di indefinito. In quest'ultimo caso è possibile usare i metodi di Object, per controllare in che stato l'oggetto sia.
Passare dati ad un oggetto
Se si intende passare dati, è possibile scrivere la funzione in questo modo:
Public Sub _New(parm1 as String, parm2 AS String, ..., parm3 AS Integer) End
all'interno possono essere assegnati i parametri ad altrettante proprietà dell'oggetto, o condizionarne il funzionamento (es. definire le dimensioni iniziali di una Form).
Note
[1] Riportiamo in questa pagina in modo più organico semplicemente diversi interventi e messaggi scritti su quest'argomento dall'utente md9327 del forum Gambas-it.org .
[2] Sull'argomento vedere anche e soprattutto la pagina, scritta sempre da md9327, della WIKI: Metodi nascosti.