Toutes les opérations avec des nombres entiers inférieurs à Int32 sont élargies à 32 bits avant le calcul par défaut. La raison pour laquelle le résultat est Int32 est simplement de le laisser tel quel après le calcul. Si vous vérifiez les opcodes arithmétiques MSIL, le seul type numérique intégral avec lequel ils opèrent est Int32 et Int64. C'est "par conception".
Si vous souhaitez que le résultat revienne au format Int16, cela n'a pas d'importance si vous exécutez le cast dans le code, ou si le compilateur (hypotétiquement) émet la conversion "sous le capot".
En outre, l'exemple ci-dessus peut être facilement résolu avec les acteurs
short a = 2, b = 3;
short c = (short) (a + b);
Les deux numéros se développeraient à 32 bits, se soustrait, puis tronquée revenir à 16 bits, ce qui est de la SP destinée à être .
L'avantage d'utiliser à court (ou octet) est principalement le stockage dans les cas où vous avez des quantités massives de données (données graphiques, streaming, etc.)
post-scriptum Oh, et l'article est "a" pour les mots dont la prononciation commence avec une consonne, et "an" pour les mots dont la forme prononcée commence par une voyelle. Un nombre, AN int.;)
BTW: quel est l'article indéfini correct? "un" ou "un"? –
L'addition et la soustraction de deux valeurs de n'importe quel type T peuvent donner un résultat qui ne rentre pas dans le type T. Voir aussi cette question: http://stackoverflow.com/questions/927391/why-is-a-cast-required -for-byte-soustraction-in-c – schnaader
C'est exactement la même chose que http://stackoverflow.com/questions/941584, juste avec des types différents et un opérateur différent. –