2010-02-12 17 views
9

ho trovato un po 'di codice che utilizza la parola chiave virtual per funzioni, come:Cosa fa la parola chiave virtuale, in actionscript?

package tryOut{ 
    public class Parent { 

     public function Parent() {} 

     public function foo():void{ 
      trace("Parent foo"); 
     }//foo 

     public virtual function bar():void{ 
      trace("Parent virtual bar"); 
     }//bar  
    }//class 
}//package 

Per quanto ho capito utilizzando la parola chiave virtual dovrebbe modificare il modo in cui l'override un metodo funziona, o il modo in cui si utilizza un metodo di bambino avrebbe lavoro, o qualcosa del genere. Ma sembra che non faccia nulla. Avendo l'estensione:

package tryOut { 
    public class Child extends Parent { 
     public function Child() {} 

     public override function foo():void { 
      trace("Child foo"); 
     }//foo 

     public override function bar():void { 
      trace("Child virtual bar"); 
     }//bar 

    }//class 
}//package 

Il codice seguente stampa:

var parent:Parent = new Parent(); 
var child:Child = new Child(); 

parent.foo(); //Parent foo 
child.foo(); //Child foo 
parent.bar(); //Parent virtual bar 
child.bar(); //Child virtual bar 

var childCast:Parent = child as Parent; 

parent.foo(); //Parent foo 
childCast.foo(); //Child foo 
parent.bar(); //Parent virtual bar 
childCast.bar(); //Child virtual bar 

Quindi entrambi i metodi funzionano allo stesso modo per quanto riguarda l'override. La parola chiave virtual modifica qualcosa che mi manca?

risposta

17

Dai documenti di aiuto (se si sta utilizzando Flash, fare una ricerca per 'virtuale'):

Ci sono anche diversi identificatori che sono a volte indicato come futuri parole riservate. Questi identificatori non sono riservati a ActionScript 3.0, anche se alcuni di loro possono essere trattati come parole chiave da un software che incorpora ActionScript 3.0. Potreste essere in grado di utilizzare molti di questi identificatori nel codice, ma Adobe consiglia di non vengono utilizzati perché possono apparire come parole chiave in una versione successiva del linguaggio.

abstract boolean byte cast 

char debugger double enum 

export float goto intrinsic 

long prototype short synchronized 

throws to transient type 

virtual volatile 

Quindi, in AS3, virtuale non fa assolutamente nulla.

+3

E la pagina attuale è, per chiunque sia interessato: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3_Flex/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9b.html – LopSae

+0

Grazie LopSae, in realtà mi è capitato di avere Flash aperto al momento, quindi Ho usato l'aiuto offline. – Ponkadoodle

1

Quindi entrambi i metodi funzionano allo stesso modo per quanto riguarda l'override.

Cosa ti fa pensare che? I test che hai mostrato non sono paragonabili.

childCast è immesso come Parent, ma si continua a chiamare la funzione in Child.

non si seleziona la stessa situazione per il metodo non virtuale.

+0

Il mio male, ho corretto l'esempio. Anche così, il comportamento rimane lo stesso. – LopSae

Problemi correlati