CREATE STATIC
CREATE STATIC
Queste parole chiave, quando sono presenti all'inizio di un file di classe, comunicano all'interprete
che i simboli non statici non vanno applicati a questa classe, una sua istanza automatica nascosta verrà creata al volo.
Se si utilizza questa funzione, il costruttore della classe (il metodo speciale _new
) verrà chiamato senza parametri.
Questa funzione è già utilizzata internamente dalle classi
Form e
Settings.
Ecco un estratto del codice della classe
Settings:
Esempio: Settings.class (gb.settings)
Export
Create Static
' ...
Public Sub _new(Optional Path As String, Optional Title As String)
' ...
If Not Path Then
Path = Settings.DefaultDir &/ Application.Name & ".conf"
Spiegazione
Considera questa linea di codice Gambas:
Print Settings["Key"]
Sembra che il metodo di accesso dell'array
_get() sia applicato alla
classe Settings per ottenere il valore corrispondente alla chiave "Key", ma questo non ha senso in quanto il metodo _get() di Settings non è
static ma dinamico, cioè non appartiene alla classe ma a qualche oggetto della classe. Ma poiché Settings è CREATE STATIC, l'interprete creerà l'istanza automatica della classe Settings dietro le quinte e userà questo oggetto per l'accesso alla array.
L'istanza automatica di Settings è, come spiegato sopra, costruita senza argomenti. Nel frammento di codice Settings.class sopra, si vede che in questo caso Path è impostato sul percorso del file di configurazione predefinito
Settings.DefaultDir &/ Application.Name & ".conf"
.
In conclusione, ogni volta che si utilizza il nome della classe "Settings" come un oggetto (utilizzando simboli dinamici su di esso), si utilizza effettivamente l'istanza automatica nascosta della classe Settings, che è collegata al file di configurazione predefinito.
[A parte] "Singletons"
Questa funzione, insieme a
CREATE PRIVATE, può essere utilizzata per implementare il
singleton pattern di programmazione orientata agli oggetti. CREATE STATIC consente di utilizzare un nome di classe come un oggetto mentre CREATE PRIVATE rende la classe non istanziabile (eccetto per l'istanza automatica).
Invece di una classe CREATE STATIC + CREATE PRIVATE puoi anche utilizzare efficacemente un
module in Gambas!
Vedi anche