Когда происходит первое обращение JIT компилятор к методу, который обращается к типу, CLR следит, чтобы вызов происходил только один раз Бывают ситуации, когда из статического конструктора типа идет обращение к другому типу, и CLR должна вызвать статический конструктор этого типа, лучше избегать таких ситуаций Также возможно обращение к конструктору типа из разных потоков одновременно, тогда на него накладывается блокировка, как только первый поток начал исполнение, остальные потоки откатываются и больше этот конструктор не вызывается, тем самым получаем, что конструктор типа реализует шаблон singleton, и в нем можно инициализировать поля, которые также должны соответсовать этому шаблону
Один
private,static - private явно указывает что он вызывается только CLR
Используя метод Runtime.Helpers,RunClassConstructor(TypeHandle t), этот метод вызывает конструктор типа, если он еще не был вызван
При выгрузке домена(завершении приложения), нет какого-то хука на уничтожение каждого типа (статического Finalize), только если использовать событие DomainUnload в System.AppDomain
Да, Рихтер пишет, что статический конструктор структуры никогда не вызывается, однако у меня он вызвался и статическое поле структуры было проинициализировано именно там