Может быть, вы звоните this.map.getMapBoundaries()
до того, как ваша карта будет готова? Попробуйте позвонить this.map.getMapBoundaries()
внутрь handleMapReady()
См. моя статья об этой самой проблеме.
В основном, beforefieldinit
означает, что "тип может быть инициализирован в любой точке, прежде чем на любые статические поля сошлются". В теории , которая означает, это может быть очень лениво инициализировано - при вызове статического метода, который не касается никаких полей, JIT не должен инициализировать тип.
На практике это означает, что класс инициализируется ранее , чем это было бы иначе - это хорошо для него, чтобы быть инициализированным в начале первого метода, который мог бы использование это. Сравните это с типами, которые не делают , имеют beforefieldinit
, относился к ним, где инициализация типа должна сразу произойти перед первым фактический использование.
Так, предположите, что мы имеем:
public static void DoSomething(bool which)
{
if (which)
{
FirstType.Foo();
}
else
{
SecondType.Bar();
}
}
, Если оба типа имеют beforefieldinit
, относился к ним (который в C# они делают по умолчанию, если тип не будет иметь статического конструктора), тогда, они будут оба быть инициализированными в начале DoSomething
метод (обычно - он не гарантируется). Если они не будут иметь beforefieldinit
тогда то только [1 116] один из них будут инициализированы, на основе флага.
Поэтому распространено использовать статического конструктора (даже пустой!), когда реализация шаблона "одиночка" .