tags:

views:

145

answers:

3

It appears in C# you can not override the post decrement operator?

I was "reflectoring" and ran across some code that reflector translated to decimal.op_Decrement(x) and I was trying to figure out whether it meant --x or 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;
    }
}

Does the framework just use the "pre-decrement" version for the "post-decrement" operation?

A: 

It doesn't matter. In the context of the variable being operated on, there's no difference between the prefix and postfix operators. It's only in the context of the calling code that the difference matters.

Michael Petrotta
so it just uses the same "increment" operator, doesn't matter if it's post or pre increment?
Dave
@Dave, yep, that's right.
Michael Petrotta
+11  A: 

Postfix ++/-- operator is the same as it's prefix counterpart, except the first creates a copy (if needed) of the variable before assigning.

So, this code:

int x = Function(y--);

Is equal to this code:

int x = Function(y);
--y;

That's why there is no need to overload the postfix operator.

LiraNuna
+1 Clear, simple and well explained, nice!
Abel
+1  A: 

Basically, there is no need to make a distinction because:

decimal x = y--;

is equivalent to

decimal x = y;
decimal.op_Decrement(y);

and

decimal x = --y;

is equivalent to

decimal x;
decimal.op_Decrement(y);
x = y;
cdmckay