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.....