Постфиксный префикс C # и разница перегрузки увеличения / уменьшения префикса

В большинстве источников говорится, что перегрузка операторов ++ и - в c # приводит к перегрузке как postfix, так и prefix одновременно. Но похоже, что их поведение все еще отличается.

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

Замечательно, хотя перегруженoperator ++ возвращает копию исходного класса, в этом примереc1 а такжеc3 становится ссылкой на один и тот же объект, в то время какc2 указывает на другую (c1=4, c2=2, c3=4 Вот). измененияCounter c3 = ++c1; вCounter c3 = c1++; выходыc1=3, c2=2, c3=4.

Итак, какова точная разница между постфиксным и префиксным приращением / уменьшением и как это влияет на перегрузку? Являются ли эти операторы одинаковыми для классов и для примитивных типов?

Ответы на вопрос(1)

Ваш ответ на вопрос