Согласно спецификации C #, + = отсутствует в списке перегружаемых операторов. Я предполагаю, что это потому, что это также оператор присваивания, который не может быть перегружен. Однако, в отличие от приведенных здесь других ответов, «x + = 1» означает , а не , то же самое , что и «x = x + 1». Спецификация C #, «7.17.2 Составное присваивание» очень ясно говорит об этом:
... the operation is evaluated as x = x op y, except that x is evaluated only once
Важной частью является последняя часть: x оценивается только один раз. Так в таких ситуациях:
A[B()] = A[B()] + 1;
это может (и делает) иметь значение, как сформулировать ваше утверждение. Но я предполагаю, что в большинстве ситуаций разница будет незначительной. (Даже если я только что столкнулся с тем, где его нет.)
Поэтому ответ на вопрос таков: нельзя переопределить оператор + =. В ситуациях, когда намерение реализуемо с помощью простых бинарных операторов, можно переопределить оператор + и получить аналогичную цель.