Рейтинг:
25
OriginalGriff
Выделение статических данных выполняется при первом использовании содержащего класса.
knackCoder
Публичный статический пустота главный()
{
Class1 obj = новый Class1(1,2);
инт вал = StaticClassName.StaticMethodname(объект);
}
Выше я изначально создал экземпляр объекта Class1, и память выделяется.
После этого я впервые вызвал статический метод; то есть вы хотите сказать, что когда я вызвал статический метод в тот момент, память была выделена для статического члена?
OriginalGriff
Нет-член не занимает памяти и не требует выделения.
Но когда вы впервые обращаетесь к статическому классу-через этот вызов члена-вызывается статический конструктор статического класса, и все статические выделения памяти для этого класса выполняются непосредственно перед вызовом конструктора.
knackCoder
Я полагаю, что ваш ответ " Нет " находится в контексте с примером, проиллюстрированным мной?.
Таким образом, для статического члена память выделяется только при первом обращении к нему?; и если я вызываю статический член, скажем, статический метод несколько раз, то статический конструктор вызывается каждый раз?
OriginalGriff
Нет, статические методы не занимают памяти - и все статическое выделение выполняется при первом обращении к классу. Таким образом, если вы вызываете статический метод класса, то все статические распределения полей выполняются, а затем вызывается статический конструктор (если таковой имеется). Наконец, выполняется метод, который вы изначально просили.
Попробуйте: поставьте какую-нибудь отладку.Запишите инструкции и следите за порядком, в котором все происходит.
Рейтинг:
0
knackCoder
Спасибо за ссылку. Я мог бы понять, что статические члены хранятся в самой куче, но все же мне не ясно время выделения памяти. Не могли бы вы поделиться более подробной информацией об этом?
F-ES Sitecore
Ответ на ваш вопрос находится в результатах этого поиска очень близко к вершине. Если бы вы приложили хотя бы немного усилий сами, а не ожидали, что люди будут кормить вас с ложечки, у вас уже был бы ответ.