Любое поле static
, которое ссылается на объект, будет препятствовать сбору этого объекта, поскольку поля static
связаны с объектом Type
для класса.Те, в свою очередь, связаны с AppDomain
и, таким образом, будут служить корнями GC.
Для strings
это зависит от того, был ли он интернирован.Если это так, то внутренний пул для текущего AppDomain
будет ссылаться на него и, таким образом, предотвращать сбор.Если нет, то string
будет вести себя как любой другой объект класса и будет иметь право на сбор, когда он больше не доступен через цепочку ссылок из корня GC.
Обратите внимание, что в обоих случаях, еслиAppDomain
выгружается, объекты становятся пригодными для сбора.