演算子のオーバーロードを実装するとき、

public class Counter {
int i;
public Counter( int i ) { this.i = i; }
public static Counter operator ++( Counter c ) {
Counter ret = new Counter(c.i + 1);
return ret;
}
}

という風に、一度新しいオブジェクトをnewしてからreturnするのが通例なようですが、
なぜc.iを直接書き換えると駄目なのでしょうか?