Каждый класс имеет структуру определения класса, в которой представлены и хранятся статические поля. Каждый «экземпляр» класса имеет доступ к статическим полям, хранящимся в определении класса (структура данных, называемая CORINFO_CLASS_STRUCT
). Даже если НИКАКИХ экземпляров не было создано, код в любом месте вашей сборки может получить доступ к этим статическим полям уровня класса, используя синтаксис classname.StaticFieldName
, вообще без какого-либо экземпляра.
Поскольку значения, хранящиеся в этих статических полях уровня класса, сохраняются, они определенно являются состояниями. Фактически, они являются общим состоянием не только для любых экземпляров класса, которые могут существовать, но и для всей сборки, независимо от того, были созданы какие-либо экземпляры или нет.
Еще более важно то, что после загрузки определения класса CORINFO_CLASS_STRUCT
, в отличие от истинного экземпляра класса, оно никогда не выгружается до тех пор, пока не будет выгружена сборка (или AppDomain). , так что, возможно, он более чувствителен, чем любое поле экземпляра, определенное в классе, потому что поле экземпляра исчезает, когда экземпляр подвергается сборке мусора.
Для получения дополнительной информации перейдите по CORINFO_CLASS_STRUCT
ссылке на замечательную книгу Дона Боксеса, Essential .Net
person
Charles Bretana
schedule
27.10.2009