CLR не поддерживает такие поля инициализации.Чтобы заставить его работать, компилятор C # переписывает ваш конструктор.IL выглядит следующим образом:
IL_0000: ldarg.0
IL_0001: newobj instance void ConsoleApplication1.Bar::.ctor()
IL_0006: stfld class ConsoleApplication1.Bar ConsoleApplication1.Foo::bar
IL_000b: ldarg.0
IL_000c: call instance void [mscorlib]System.Object::.ctor()
IL_0011: ret
Обратите внимание, что конструктор Bar вызывается перед базовым конструктором Foo.В чем отличие от вашего другого фрагмента, там базовый конструктор Foo называется , затем .Это редко будет иметь значение, , если поле не будет унаследовано и конструктор базового класса что-то с ним сделает.
Или, если инициализаторы поля зависят друг от друга, они инициализируются в строгом текстовом порядке,Вы можете управлять порядком, выполнив его явно в конструкторе.