2012-03-12 11 views
12

Tengo una clase base llamada Room y una subclase llamada Attic, y otra llamada Basement.AS3 Casting one type to another

Tengo una clase de controlador que tiene un atributo llamado CurrentLocation que es tipo Room. La idea es poder poner Attic o Basement en esa propiedad y recuperarla, luego convertirla al tipo que sea.

Así que si en el controlador el contenido es de tipo Attic, estoy tratando de encontrar la forma de explicitarlo. Yo creía que sabía, pero no su trabajo ... Esto es lo que pensé que sería, préstamos de Java:

var myAttic:Attic = (Attic) Controller.CurrentLocation; 

Esto me da un error de sintaxis:

1086: Syntax error: expecting semicolon before instance.

Entonces, ¿cómo convierte implícitamente ? ¿O puedes? Juraría haber hecho esto antes como as3.

Respuesta

25

Estas son las opciones para la emisión en ActionScript 3:

  1. Uso as.

    var myAttic:Attic = Controller.CurrentLocation as Attic; // Assignment. 
    (Controller.CurrentLocation as Attic).propertyOrMethod(); // In-line use. 
    

    Esto asignará a nullmyAttic si falla el reparto.

  2. Envolver en Type().

    var myAttic:Attic = Attic(Controller.CurrentLocation); // Assignment. 
    Attic(Controller.CurrentLocation).propertyOrMethod(); // In-line use. 
    

    Esto arroja una TypeError si falla el reparto.

+2

¿Por qué es preferible? Depende. También 'Class (bla)' es órdenes de magnitud más lenta si falla. La comprobación de 'null' es siempre más fácil. –

+0

@Marty Wallace, díganos cómo "preferir" envolver en matriz, XML u objeto? –

+0

@Marty Wallace imaginemos que tenemos Array o XML o tipo de objeto en lugar de Attic. ¿Eso afectará tu respuesta? –

Cuestiones relacionadas