Documentazione di Flash CS3 |
|||
| Programmazione in ActionScript 3.0 > Linguaggio e sintassi ActionScript > Tipi di dati > Classi dinamiche | |||
Una classe dinamica definisce un oggetto che può essere alterato in fase di runtime aggiungendo o modificandone le proprietà e i metodi. Un classe non dinamica, ad esempio la classe String, si definisce chiusa (sealed in inglese). Non è possibile aggiungere proprietà o metodi a una classe chiusa in runtime.
Per creare una classe dinamica si utilizza l'attributo dynamic nella relativa dichiarazione. Ad esempio, il codice seguente crea una classe dinamica denominata Protean:
dynamic class Protean
{
private var privateGreeting:String = "hi";
public var publicGreeting:String = "hello";
function Protean()
{
trace("Protean instance created");
}
}
Se successivamente si crea un'istanza della classe Protean, è possibile aggiungervi proprietà o metodi esternamente alla definizione della classe. Ad esempio, il codice seguente crea un'istanza della classe Protean e vi aggiunge due proprietà denominate rispettivamente aString e aNumber:
var myProtean:Protean = new Protean(); myProtean.aString = "testing"; myProtean.aNumber = 3; trace(myProtean.aString, myProtean.aNumber); // testing 3
Le proprietà aggiunte a un'istanza di una classe dinamica sono entità runtime, quindi le verifiche di qualsiasi tipo vengono eseguite in fase di runtime. Non è possibile aggiungere un'annotazione di tipo a una proprietà creata in questo modo.
È anche possibile aggiungere un metodo all'istanza myProtean definendo una funzione e associandola a una proprietà dell'istanza myProtean. Il codice seguente sposta l'istruzione trace in un metodo denominato traceProtean():
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
myProtean.traceProtean = function ()
{
trace(this.aString, this.aNumber);
};
myProtean.traceProtean(); // testing 3
I metodi creati in questo modo, tuttavia, non hanno accesso a eventuali proprietà o metodi privati della classe Protean. Inoltre, anche i riferimenti a proprietà o metodi pubblici della classe Protean devono essere qualificati con la parola chiave this o con il nome della classe. Nell'esempio seguente, il metodo traceProtean() tenta di accedere alle variabili private e pubbliche della classe Protean.
myProtean.traceProtean = function ()
{
trace(myProtean.privateGreeting); // undefined
trace(myProtean.publicGreeting); // hello
};
myProtean.traceProtean();
Flash CS3
Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti
Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000046.html