Статический конструктор выполняется при первом обращении к статическому члену. Зная это, у меня есть несколько вопросов:
[EDIT] : Хочу уточнить, что меня НЕ интересует микрооптимизация.
Я задаю этот вопрос, потому что это проектное решение. Если статический конструктор снижает производительность, я буду разрабатывать свой код с учетом этого и буду лучше осведомлен о решениях, которые могут повлиять на производительность.
Вот пример, иллюстрирующий мой вопрос. Будет ли какая-то польза от использования метода Independent
и помещения его в отдельный статический класс? Таким образом, не нужно будет проверять, был ли инициализирован статический Тест
. [ Обновление См. Мой ответ ниже для лучшего и более простого примера].
static class Test {
// Static constructor with dependent method:
static int x;
static Test() { x = 5; }
static int Dependent() { return x; }
// Static, independent method:
static int Independent(int y) { return y+1; }
}
Вот цитата из спецификации C # о статическом конструкторе:
Выполнение статического конструктора запускается первым из следующих событий, происходящих в домене приложения:
- Экземпляр класса создан.
- Ссылка на любой из статических членов класса.