Differenza tra cast esplicito e uso del comando 'as'
Scritto da
Roberto Albano il
giovedì 26 maggio 2011
•
Linguaggio:
• Livello: 100
Per effettuare una conversione da un tipo A ad un tipo B, si può
pensare di eseguire un cast esplicito:
A a = new A();
B b = (B)a;
oppure si può utilizzare il comando 'as':
A a = new A();
B b = (a as B);
Tuttavia le due tipologie di conversione sono differenti per
comportamento, per valore di ritorno e anche per istruzioni del
compilatore utilizzate.
Andiamo a vedere queste differenze:
- innanzitutto il cast esplicito ritorna una exception
in caso di errori nella conversione, mentre nello stesso caso il
comando 'as' ritorna semplicemente un valore
null
- anche in virtù del punto 1, in caso di utilizzo del comando
'as' è necessario che il tipo B del nostro esempio sia
sempre un reference type o almeno un nullable
type (come ad esempio int?), mentre nel caso del
cast esplicito questo non è necessario
- con il cast esplicito è possibile utilizzare
conversioni definite dall'utente nella class (user-defined
conversions, per esempio nel caso di due classi senza nessuna
relazione tra loro), mentre con il comando 'as' questo non
è consentito
- infine, scendendo al livello dell'Intermediate
Language (IL), le istruzioni utilizzate (OpCode) sono
diverse, infatti mentre un cast esplicito viene tradotto
in IL con l'istruzione 'castclass', per il comando
'as' si fa ricorso all'istruzione 'isinst'
Sebbene in alcuni casi l'uso del comando 'as' possa
risultare leggermente più veloce rispetto al cast
esplicito, la scelta dell'uno o dell'altro sistema dipende
molto dallo scenario in cui è necessario effettuare la
conversione.
Tags: linguaggio,C#