Domanda

Qualcuno conosce la vera differenza tra i due modi di scrivere il tipo in Flex 3?

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

Preferisco usare il secondo metodo perché genererà un errore quando il cast del tipo fallisce, mentre il primo metodo restituirà semplicemente null. Ma ci sono altre differenze? Forse qualche vantaggio nell'usare il primo metodo?

È stato utile?

Soluzione

Il secondo tipo di casting ha comportamenti diversi per il livello superiore ( http: //livedocs.adobe .com / flex / 2 / langref / ), ad es Array (obj) non getta nel modo semplice che descrivi; crea un nuovo array se possibile da obj, anche se obj è un array.

Sono sicuro che i tempi in cui ciò comporterebbe un comportamento imprevisto sarebbero rari ma uso sempre " as " per questa ragione. Significa che se lo faccio

int(str) 

So che è un cast nel tentativo di "quot" di convertire " senso della parola non nel "prometto che è" senso.

ref: ho avuto qualche conferma al riguardo da http : //raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/

Altri suggerimenti

  • Il metodo as restituisce null se il cast fallisce.
  • Il metodo () genera ed errore se il cast fallisce.

Se il valore di variabile non è compatibile con MyObject , myObject1 conterrà null e sarai sorpreso da un errore del puntatore null ( 1009: impossibile accedere a una proprietà o a un metodo di riferimento a un oggetto null. ) da qualche parte in seguito nel programma quando si tenta di accedervi. Nel caso in cui si stia eseguendo il casting utilizzando la sintassi MyObject (variabile) , si otterrà un errore di coercizione del tipo ( 1034: Type Coercion non riuscito: impossibile convertire _ in _ ) stessa linea - che è più utile che ottenere un 1009 da qualche parte dopo e chiedersi cosa è andato storto.

Penso di aver letto da qualche parte su questo sito che come è leggermente più veloce di () , ma non riesco a trovare di nuovo la domanda.

Oltre a questa domanda più volte, troverai una risposta più approfondita qui .

Di recente ho scoperto l'utilissimo tag [] durante la ricerca su StackOverflow, mi permette di cercare solo nelle domande taggate con i tag specificati. Quindi potresti fare una ricerca come [actionscript-3] come vs cast . Ci sono altri suggerimenti per la ricerca qui: https://stackoverflow.com/search .

E no; l'ironia in quanto non riesco a trovare la domanda sulla performance e scrivere su come cercare non è persa su di me;)

Penso che restituisca la classe base e non null quando il casting fallisce e () genera un errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top