This is the intermediate language (IL) that the compiler generates (VS2013RC/.NET 4.5.1RC):
.method public hidebysig static int32 GetNextIndex() cil managed
{
    .maxstack 8
    L_0000: ldsfld int32 ConsoleApplication4.Program::index
    L_0005: dup 
    L_0006: ldc.i4.1 
    L_0007: add 
    L_0008: stsfld int32 ConsoleApplication4.Program::index
    L_000d: ret 
}
So, what does that do? Let's say that index has the value 6 before calling it.
    L_0000: ldsfld int32 ConsoleApplication4.Program::index
loads the value of index onto the evaluation stack - stack contains 6.
    L_0005: dup
duplicates the value on the top of the stack - stack contains 6, 6
    L_0006: ldc.i4.1
loads the value 1 onto the stack - stack contains 6, 6, 1
    L_0007: add 
adds the top two values on the stack, and places the result back on the stack. stack contains 6, 7
    L_0008: stsfld int32 ConsoleApplication4.Program::index
Stores the top value on the stack into index. index now equals 7, stack contains 6.
    L_000d: ret 
Takes the top value on the stack (6) as the return value.