C # postfix e prefixo incremento / decréscimo de diferença de sobrecarga

A maioria das fontes diz que sobrecarregar ++ e - operadores em c # resulta sobrecarregando ambos, postfix e prefixo de uma só vez. Mas parece que o comportamento deles ainda é diferente.

class Counter
{
    public Counter(int v = 0)
    {
        this.v = v;
    }
    public Counter(Counter c)
    {
        v = c.v;
    }
    public int GetValue() { return v; }
    public static Counter operator ++(Counter c)
    {
        c.v++;
        return new Counter(c);
    }
    private int v;
}


class Program
{
    public static void Main()
    {
        Counter c1 = new Counter(1);

        Counter c2 = c1++;

        Counter c3 = ++c1;

        c3++;

        System.Console.WriteLine("c1 = {0}", c1.GetValue());
        System.Console.WriteLine("c2 = {0}", c2.GetValue());
        System.Console.WriteLine("c3 = {0}", c3.GetValue());
    }
}

Maravilhosamente, embora sobrecarregadooperator ++ retorna cópia da classe original, neste exemploc1 ec3 torna-se referências ao mesmo objeto, enquantoc2 aponta para um diferente (c1=4, c2=2, c3=4 Aqui). MudandoCounter c3 = ++c1; paraCounter c3 = c1++; saídasc1=3, c2=2, c3=4.

Então, qual é a diferença exata entre incremento / decremento de postfix e prefixo e como isso afeta a sobrecarga? Esses operadores funcionam da mesma maneira para classes e para tipos primitivos?

questionAnswers(1)

yourAnswerToTheQuestion