Faire un cast, c'est définir une variable typée dans un autre type, lorsque c'est possible.
Certains casts sont implicites, le système les gère seul.
D'autres sont explicites, nous devons les déclarer.
Par exemple :
- Code:
-
double decimal = 1.2;
int entier;
entier = decimal ; // ceci ne fonctionnera pas, car les types sont différents, le système ne sait pas faire entrer 1.2 dans un entier.
Nous le savons, il faut arrondir. Pour celà, nous devons spécifier un cast, pour dire que nous voulons explicitement changer un double en int.
Cela se fait ainsi :
- Code:
-
entier = (int)decimal; // cette ligne fonctionnera, entier prendra la valeur de 1
Chaque classe déclare des propriétés, qu'elle les lègue en héritage aux classes dérivées.
Donc par exemple :
Mobile déclare la propriété
Name de type string.
On peut donc faire:
- Code:
-
Mobile mob = GetMobile();//méthode qui renverrait une instance de Mobile
string nom = mob.Name;
Maintenant, PlayerMobile déclare la variable Race.
On n epeut pas faire:
- Code:
-
Mobile mob = GetMobile();//méthode qui renverrait une instance de Mobile
RaceType race = mob.Race;
Car Race n'est pas défini dans Mobile. Il nous faut donc faire un cast, pour transformer mob du type Mobile vers le type PlayerMobile:
- Code:
-
Mobile mob = GetMobile();//méthode qui renverrait une instance de Mobile
RaceType race = ( (PlayerMobile)mob ).Race;
Mais attention aux casts : la ligne précédente compilera mais à l'execution, celà pourrait crasher car si un PlayerMobile est forcement un Mobile, l'inverse n'est pas vrai.
Si GetMobile a renvoyé un joueur sous forme de Mobile, le cast en PlayerMobile réussira.
Si GetMobile a renvoyé un Ettin sous forme de Mobile, le cast en PlayerMobile échouera.
La valeur de (PlayerMobile)mob sera alors nulle.
Et demander la valeur d'une variable d'un objet nul, ça crash.
Il faut donc faire :
- Code:
-
Mobile mob = GetMobile();//méthode qui renverrait une instance de Mobile
PlayerMobile player = (PlayerMobile)mob;//le cast
if(player != null)//si le cast renvoie différent de nul
{
RaceType race = player.Race;
}