C # postfix i różnica przyrostu prefiksu / przeciążenia

Większość źródeł twierdzi, że przeciążanie ++ i - operatorów w wynikach c # powoduje przeciążenie zarówno postfixa, jak i prefiksu naraz. Ale wygląda na to, że ich zachowanie jest wciąż inne.

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());
    }
}

Cudownie, choć przeciążonyoperator ++ w tym przykładzie zwraca kopię oryginalnej klasyc1 ic3 staje się odniesieniem do tego samego obiektuc2 wskazuje na inną (c1=4, c2=2, c3=4 tutaj). Wymiana pieniędzyCounter c3 = ++c1; doCounter c3 = c1++; wyjściac1=3, c2=2, c3=4.

Jaka jest dokładna różnica między przyrostkiem postfixa a przyrostem / zmniejszeniem przedrostka i jak wpływa na przeciążenie? Czy te operatory działają tak samo dla klas i typów pierwotnych?

questionAnswers(1)

yourAnswerToTheQuestion