Il y a deux questions ici. La première est: "pourquoi est court, plus court entraîner int?"
Eh bien, supposons que court, plus court a été de courte et de voir ce qui se passe:
short[] prices = { 10000, 15000, 11000 };
short average = (prices[0] + prices[1] + prices[2]) / 3;
Et la moyenne est, bien sûr, -9845 si ce calcul est effectué en short. La somme est plus grande que la plus grande possible, en bref, il s'enroule autour de négatif, et puis vous divisez le nombre négatif.
Dans un monde où l'arithmétique entière s'enroule autour de il est beaucoup plus judicieux de faire tous les calculs en int, un type qui est susceptible d'avoir assez de gamme typique de calculs, pas de débordement.
La deuxième question est:
- court, plus court est de type int
- l'attribution int court est illégal
- a +=b est le même que a = a + b
- donc à court += court devrait être illégal
- alors, pourquoi est-ce légal?
La question a une prémisse inexacte; la troisième ligne ci-dessus est faux. La spécification C# états dans la section 7.17.2
Sinon, si l'opérateur est
un prédéfinies de l'opérateur, en cas de retour
type de l'opérateur sélectionné est
explicitement convertie dans le type de
x, et si y est implicitement convertible
pour le type de x ou de l'opérateur est un
opérateur de décalage, puis l'opération est
évalué comme x = (T)(x op y), où T
est le type de x, sauf que x est
évaluées qu'une seule fois.
Le compilateur insère la fonte sur votre nom. Le bon raisonnement est:
- court, plus court est de type int
- l'attribution int court est illégal
- + s1= s2 est le même que s1 = (short)(s1 + s2)
- donc ce devrait être légal
Si elle n'a pas insérer de la fonte pour vous, alors il serait impossible d'utiliser des raccourcis sur de nombreux types.