The member instantiations are added first in the constructor. If you check out the IL code that is actually created using Reflector, this is what the compiler does with it:
.class auto ansi nested public beforefieldinit Foo
extends [mscorlib]System.Object
{
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed
{
.maxstack 8
L_0000: ldarg.0
L_0001: ldc.i4.1
L_0002: stfld int32 Test.Program/Foo::bar
L_0007: ldarg.0
L_0008: call instance void [mscorlib]System.Object::.ctor()
L_000d: nop
L_000e: nop
L_000f: ldarg.0
L_0010: ldc.i4.2
L_0011: stfld int32 Test.Program/Foo::bar
L_0016: nop
L_0017: ret
}
.field public int32 bar
}
So, the member instantiations are placed first in the constructor, then it calls the constructor of the base type, then comes the code that you put in the constructor.