Se l'applicazione utilizza più moduli di script per controllare diverse parti dell'applicazione, a volte può essere utile consentire la condivisione di parti degli script tra i moduli di script. I principali vantaggi delle entità condivise sono la riduzione del consumo di memoria e il fatto che il tipo di entità condivisa è lo stesso per tutti i moduli, semplificando così lo scambio di informazioni tra i moduli in cui viene utilizzato. Le entità condivise hanno una restrizione: non possono accedere a entità non condivise perché queste ultime sono esclusive del modulo di script in cui sono state compilate. |
Come dichiarare entità condivise
Per dichiarare un'entità condivisa è sufficiente anteporre la parola chiave "shared" alla dichiarazione ordinaria, ad esempio
shared class Foo |
Se lo script tenta di accedere a un'entità non condivisa dall'entità condivisa, il compilatore darà un messaggio di errore.
Ovviamente, per funzionare, gli script di tutti i moduli che condividono l'entità devono implementarla allo stesso modo. Se ciò non avviene, il compilatore darà un errore negli script compilati dopo il primo script che ha implementato l'entità condivisa.
Il modo più semplice per garantire che l'implementazione sia la stessa è utilizzare lo stesso file sorgente, ma questo non è un requisito.
Entità condivise esterne
Un'alternativa alla dichiarazione dell'intera entità condivisa in ogni modulo è quella di dichiarare come esterna l'entità condivisa che si sa essere stata compilata in precedenza. Questo può abbreviare lo script, riducendo sia le dimensioni del codice sorgente sia il tempo di compilazione.
Per dichiarare un'entità condivisa come esterna, basta aggiungere la parola chiave 'external' prima della dichiarazione e terminare la dichiarazione con ';' dopo la firma che identifica univocamente l'entità.
external shared class Foo; |
Quando si compila un'entità condivisa dichiarata come esterna e l'entità condivisa non è stata compilata in nessun altro modulo prima di essa, il compilatore darà un messaggio di errore.
Cosa può essere condiviso
Attualmente possono essere condivise solo le entità classe, interfaccia, funzione, enum e funcdefs.
Le versioni future potrebbero consentire la condivisione anche delle variabili globali.