Pregunta

¿Alguien sabe la diferencia real entre las dos formas de conversión de tipos en Flex 3?

var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);

Prefiero usar el segundo método porque arrojará un Error cuando el tipo de conversión falla, mientras que el primer método simplemente devolverá el valor nulo. ¿Pero hay alguna otra diferencia? ¿Quizás alguna ventaja de usar el primer método?

¿Fue útil?

Solución

El segundo tipo de conversión tiene un comportamiento diferente para el nivel superior ( http: //livedocs.adobe .com / flex / 2 / langref / ) tipos, por ejemplo La matriz (obj) no se proyecta de la manera directa que usted describe; crea una nueva matriz si es posible desde obj, incluso si obj es una matriz.

Estoy seguro de que los tiempos en que esto causaría un comportamiento inesperado serían raros, pero siempre uso " como " por esta razón. Significa que si lo hago

int(str) 

Sé que es un elenco en el " intento de convertir " sentido de la palabra que no está en el " Prometo que es " sentido.

ref: obtuve una confirmación de esto en http : //raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/

Otros consejos

  • El método as devuelve null si la conversión falla.
  • El método () arroja un error si falla la conversión.

Si el valor de variable no es compatible con MyObject , myObject1 contendrá null y usted será sorprendido por un error de puntero null ( 1009: no se puede acceder a una propiedad o método de referencia de objeto nulo. ) en alguna parte del programa cuando intenta acceder a ella. Cuando se emita utilizando la sintaxis MyObject (variable) , obtendrá un error de tipo de coerción ( 1034: Error de Coacción de tipo: no se puede convertir _ a _ ) en el misma línea, lo cual es más útil que obtener un 1009 en algún lugar más tarde y preguntarse qué salió mal.

Creo que leí en alguna parte de este sitio que as es ligeramente más rápido que () , pero no puedo encontrar la pregunta nuevamente.

Además de que esta pregunta se ha formulado muchas veces, encontrará una respuesta más detallada here .

Recientemente descubrí la muy útil etiqueta [] cuando busqué en StackOverflow, solo permite buscar en preguntas etiquetadas con la (s) etiqueta (s) especificada (s). Así que puedes hacer una búsqueda como [actionscript-3] as vs cast . Hay más sugerencias de búsqueda aquí: https://stackoverflow.com/search .

Y no; la ironía en que no puedo encontrar la pregunta sobre el rendimiento y escribir sobre cómo buscar no se me pierde;)

Creo que devuelve la clase base y no nula cuando falla la conversión y () produce un error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top