Spesso e volentieri quando si parla di casting si vedono parecchi errori e soprattutto si pensa sempre e solo alla classica notazione con il nome della classe tra parentesi tonde prima dell’oggetto da castare.
Qualora il tipo non sia corretto, viene generata un’eccezione di tipo InvalidCastException.
Ecco quindi che in uno scenario in cui si hanno 2 classi, Persona e Auto, per eseguire casting correttamente si devono definire all’interno di un blocco try-catch.
1 Object obj = new Persona();
2
3 try
4 {
5 Auto auto = (Auto) obj;
6 MessageBox.Show(“E’ un’auto”);
7 }
8 catch(InvalidCastException)
9 {
10 MessageBox.Show(“Non è un’auto”);
11 }
Nell’esempio ovviamente il messaggio a video sarebbe “Non è un’auto”.
Le eccezioni sono però molto pesanti, quindi bisognerebbe sempre cercare di evitarle. Ecco quindi che vale la pena usare un altro approccio che ci permetta di risolvere il tutto solo con un blocco if-else invece che con un try-catch.
Abbiamo due possibilità: usare la parola chiave is oppure eseguire il cast attraverso la parola chiave as.
is ritorna un booleano, true se è possibile effettura il casting senza eccezione. Vediamo un esempio:
1 Object obj = new Persona();
2
3 if (obj is Auto)
4 MessageBox.Show(“E’ un’auto”);
5 else
6 MessageBox.Show(“Non è un’auto”);
La caratteristica di as invece è che qualora il casting specificato non risulti valido allora la variabile viene iniziallizzata a null.
1 Object obj = new Persona();
2
3 Auto auto = obj as Auto;
4 if (auto != null)
5 MessageBox.Show(“E’ un’auto”);
6 else
7 MessageBox.Show(“Non è un’auto”);
cast, casting, sviluppo, c#