Spécification C# , Section 7.17.2 Composé d'affectation:
Une opération de la forme x op= y
est traitée par l'application d'opérateur binaire résolution de surcharge (§7.3.4) comme si l'opération a été écrit x op y
. Ensuite,
...
• Dans le cas contraire, si l'opérateur est un opérateur prédéfini, si le type de retour de l'opérateur sélectionné est explicitement convertible pour le type d' x
, et si, y
est implicitement convertie dans le type d' x
ou 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 d' x
, sauf qu' x
est évaluée qu'une seule fois
Et c'est exactement la situation que nous avons ici. Le type de retour de l'opération est d' int
, mais les types d' x
et y
sont à la fois char
, et donc un supplément de distribution est automatiquement insérée pour nous.
(Je crois que cette règle existe, car il n'y a nulle part pour vous d'être en mesure d'insérer un cast explicite vous-même et c'est une sorte de "attendus" de travail, en particulier dans les cas où l' x
et y
sont du même type)