2010-02-12 15 views
9

he encontrado un código que utiliza la palabra clave virtual de funciones, como:¿Qué significa la palabra clave virtual, en 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 

Por lo que yo entiendo usando la palabra clave virtual debe modificar la forma en sustituir un método que funciona, o la forma usando un método niño lo haría trabajo, o algo. Pero parece que no hace nada en absoluto. Tener la extensión:

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 

Los siguientes código imprime:

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 

Así que ambos métodos funcionan de la misma con respecto a la anulación. ¿La palabra clave virtual cambia algo que me falta?

Respuesta

17

A partir de los documentos de ayuda (Si va a utilizar Flash, hacer una búsqueda de 'virtual'):

También hay varios identificadores que se refieren a veces como futuros palabras reservadas. Estos identificadores no están reservados por ActionScript 3.0, aunque algunos de ellos pueden tratarse como palabras clave mediante el software que incorpora ActionScript 3.0. Es posible que pueda utilizar muchos de estos identificadores en su código, pero Adobe recomienda que no los use porque pueden aparecer como palabras clave en una versión posterior del idioma.

abstract boolean byte cast 

char debugger double enum 

export float goto intrinsic 

long prototype short synchronized 

throws to transient type 

virtual volatile 

Así que en AS3, virtuales no hace absolutamente nada.

+3

Y la página real es, para cualquier persona interesada: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3_Flex/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9b.html – LopSae

+0

Gracias LopSae, en realidad, solo tenía Flash abierto en ese momento, por lo que Utilicé la ayuda fuera de línea. – Ponkadoodle

1

Por lo tanto, ambos métodos funcionan igual con respecto a la anulación.

¿Qué te hace pensar eso? Las pruebas que has mostrado no son comparables.

childCast se escribe como Parent, pero aún así se llama a la función en Child.

No comprueba la misma situación para el método no virtual.

+0

Malo, he corregido el ejemplo. Aun así, el comportamiento se mantiene igual. – LopSae

Cuestiones relacionadas