private static int i = 0;

Are you sure that `i` should be static? If it's static there isn't too much sense of the `Counter instance = new Counter()` instance and the `Next` and the `Reset` methods also could be static.

Anyway, I'd use a longer variable name, like `nextValue` for better readability.