Я могу представить программиста в зависимости от порядка инициализации из-за побочных эффектов с другими статическими классами. Мы оба знаем, что в зависимости от побочных эффектов это плохая практика, но это не обязательно незаконно.
Рассмотрим что-то вроде этого:
class Foo
{
static string header = Bar.GetHeader();
static string version = Bar.GetVersion();
}
И Bar.GetVersion
предполагает, что Bar.GetHeader
был вызван. Если бы компилятор мог изменить порядок инициализации, программист не смог бы гарантировать порядок инициализации.
Гадкий, само собой разумеющийся, но совершенно законный. Если вы представляете эффекты второго порядка (то есть вызываемые статические методы, которые сами зависят от классов, имеющих побочные эффекты), вы видите, что компилятор не может надежно переставить что-либо, как невозможно (в общем случае) компилятору переставить порядок вызовов функций в вашем статическом конструкторе.