Статический конструктор вызывается, когда (согласно TCPL ):
- Создается экземпляр типа класса.
- Любой из статических членовссылки на тип класса.
В качестве примера рассмотрим класс со статическим методом Main
, в котором начинается выполнение: если у вас есть статический конструктор, он будет вызываться до Метод Main вызывается.
Обратите внимание, что даже перед выполнением статического конструктора любые статические поля инициализируются в их значение по умолчанию, а затем для этих полей выполняются инициализаторы статического поля.Только тогда выполняется статический конструктор (cctor).
Чтобы ответить на ваш вопрос более прямо: статические конструкторы не наследуются и их нельзя вызывать напрямую, следовательно, ваш Base
cctor не будетвызывается в вашем сценарии, если вы не передаете абстрактному классу Base
статический метод и сначала вызываете его, т. е. как в Base.Initialize()
, как вы уже предложили.
По поводу простого мышления C # (в Java это отличается): статические методы не наследуются, поэтому статические конструкторы не должны наследоваться, так как это может вызвать нежелательные побочные эффекты (cctor вызывается, когда ничего не ссылаетсяэтот класс).