Je me demandais ce que c # fait lorsque vous par exemple, de jeter un objet code> à un beaucoup apprécié :)! p> p> int code>.
4 Réponses :
Ceci est un exemple de boxe et de construction: p>
http://msdn.microsoft.com/ en-us / bibliothèque / yz2be5wk (vs.80) .aspx p>
C # prend la valeur Type d'int (c'est peut-être une variable locale, dans un registre ou sur la pile), la boxant dans un objet et la mettant sur le tas. Lorsque vous revenez à int, le processus est inversé. P>
Plus généralement que la compliance crée un complexe assez complexe et de type IL spécifique en cas de coulée, en particulier qu'il doit s'assurer au moment de l'exécution que les types que vous mondez entre soient compatibles sont compatibles, recherchez des opérateurs de distribution spécifiques définis dans votre code, gérer les débordements. etc, etc. Le casting est un processus assez coûteux. P>
Le même processus se produit-il quand c'est une conversion implicite? Donc: objet o = myClass code>
Non - Si MyClass n'est pas un type de valeur, il n'y a pas de code de conversion de type réel ou de boxe qui se produit ici. Casting La chaîne d'héritage comme ceci est un cas trivial, vous vous attendiez donc à une sortie ille très rapide et simple. L'objet référencé par O est toujours le même type que celui référencé par MyClass.
Prenez une gandinée ici pour plus d'informations sur: casting < / a> p>
Aussi, vaut également une lecture: boxe et décomposition < / a> p>
Dans ce cas particulier, il s'appelle "Unboxing", check http: // msdn .microsoft.com / fr-US / US / Bibliothèque / YZ2BE5WK.ASPX P>
Dans l'affaire Général, c'est une chose délicate; p it dépend du scénario exact: p>
objet code>, il s'agit d'une opération UNBOX EM>, qui inverse la manière particulière dans laquelle Les types de valeurs peuvent être stockés dans une référence d'objet ( Unbox code>
/ Unbox_any code>
) li>
- Si le type source est un
nullable code >
, alors le .value code> une propriété> est évaluée (ce qui peut provoquer une exception si la valeur est vide) li>
- Si le type source est l'un des quelques types intégrés documentés dans la spécification (
uint code>, float code>, etc.), puis le fonctionnement spécifique (qui peut être rien du tout) n'est émis à effectuer la conversion directement dans IL ( conv_i4 code>
) li>
- Si le type source a un opérateur de conversion implicite ou explicite personnalisé défini (correspondant au type cible), alors cet opérateur est invoqué em> comme méthode statique (
Appel code>
) LI>
- (dans le cas des types de référence) Si ce n'est évidemment pas toujours faux (différentes hiérarchies), une fonte / vérification de référence est effectuée (
CASTCLASS CODE>
) LI>
- Sinon, le compilateur traite comme une erreur li>
ul>
Je pense em> qui est assez complet? p>