public class NonZero > { > private int i = 1; > public int I > { > get { return i; } > set { i = value; } > } > > public static NonZero operator ++(NonZero nz) > { > nz.i = nz.i == -1 ? 1 : nz.i+1; > return nz; > } > > public static NonZero operator --(NonZero nz) > { > nz.i = nz.i == 1 ? -1 : nz.i - 1; > return nz; > } > }>works but requires odd syntax: int i = (NonZeroInstance++).I
public class AutoIncr > { > int i = 1; > > public static int operator +(AutoIncr a, int ini) > { > a.i = a.i + ini; > a.i = a.i==0 ? 1 : a.i; > return a.i; > } > public static int operator +(int ini, AutoIncr a) > { > int ret = a.i; > a.i = a.i + ini; > a.i = a.i == 0 ? 1 : a.i; > return ret; > } > public static int operator -(AutoIncr a, int ini) > { > a.i = a.i - ini; > a.i = a.i == 0 ? -1 : a.i; > return a.i; > } > public static int operator -(int ini, AutoIncr a) > { > int ret = a.i; > a.i = a.i - ini; > a.i = a.i == 0 ? -1 : a.i; > return ret; > } > }>Gives behaviour similar to a prefix and postfix increments since AutoIncrInstance+1 is different to 1+ AutoIncrInstance and handles changes other than just a simple increment.....