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