В C# вы не можете переопределить оператор пост декремента?Перегрузка операторов ++ и - C#
Я был «отражением» и натолкнулся на какой-то код, отражающий рефлектор на decimal.op_Decrement(x)
, и я пытался выяснить, имеет ли он значение --x
или x--
.
public struct IntWrapper
{
public static IntWrapper operator --(IntWrapper value)
{
return new IntWrapper(value.value - 1);
}
public static IntWrapper operator (IntWrapper value)--
{
???
}
private int value;
public IntWrapper(int value)
{
this.value = value;
}
}
Является ли каркас просто использующим версию «до декремента» для операции «после декремента»?
+1 Ясный, простой и хорошо объясненный, приятный! – Abel
Хотя это объяснение ясно выражает общую концепцию постфиксального декремента, это противоречит подробному объяснению операторов префикса и постфикса EricLippert (см. Http://stackoverflow.com/a/3346729/1245420). Если полагать Эрика, 'Function (oldValueOf_y)' вызывается ** ПОСЛЕ **, переменная, известная как 'y', уменьшается. То, что передано 'Function()', является копией 'y' до того, как оно уменьшилось. Таким образом, казалось бы, что в C#, как и в C++, семантика постфиксного приращения/декремента предотвращает очевидные оптимизации, которые компилятор может сделать с приращением/уменьшением префикса. – phonetagger