No, they do not behave quite like that. Without a static constructor, the timing of when the type initializer is executed is much weaker - this can happen sooner or later than you expected.
When there is a static constructor, the type initializer is executed when the type is first used in terms of any static member being accessed, or any instantiated instance.
, , - ( ). JIT , (, , ) ( , , ).
IL , beforefieldinit; .