Ответ 1
Используете ли вы его для инициализации статических полей в экземпляре нестатического типа?
В значительной степени, за исключением того, что статические поля (или статические члены любого типа) не связаны с экземплярами; они связаны с самим типом, независимо от того, является ли он статическим классом или нестационарным классом.
В документации перечислены некоторые свойства статических конструкторов, один из которых:
- Статический конструктор вызывается автоматически для инициализации класса до создания первого экземпляра или ссылки на любые статические члены.
Здесь "before" означает "непосредственно перед", и в зависимости от того, что происходит в первую очередь. Это связано с тем, что статический конструктор вызывается только один раз для каждого типа при выполнении одной программы.
Есть ли какие-либо вещи, которые нужно учитывать при использовании статического конструктора?
Здесь полный список, указанный в приведенной выше ссылке, который должен дать вам представление о том, чего ожидать при использовании статического конструктора:
Статический конструктор не принимает модификаторы доступа или не имеет параметров.
Статический конструктор вызывается автоматически для инициализации класса до создания первого экземпляра или ссылки на любые статические члены.
Статический конструктор нельзя вызвать напрямую.
Пользователь не может контролировать, когда статический конструктор выполняется в программе.
Типичное использование статических конструкторов - это когда класс использует файл журнала, а конструктор используется для записи записей в этот файл.
Статические конструкторы также полезны при создании классов-оболочек для неуправляемого кода, когда конструктор может вызвать метод
LoadLibrary
.Если статический конструктор создает исключение, среда выполнения не будет вызывать его второй раз, и тип останется неинициализированным для времени жизни домена приложения, в котором работает ваша программа.
Помимо того, что вы не пытаетесь получить доступ к нестационарным элементам, так как вы не в конструкторе экземпляра, другое главное, что вам нужно учитывать, это то, что статический конструктор всегда вызывается в определенное время во время программы выполнение. Как указано, вы не можете контролировать это, кроме как путем управления, когда "создается первый экземпляр или ссылки на какие-либо статические члены".